NEPLg2 静的検査の複雑化解消計画

作成日: 2026-04-28

目的

NEPLg2 の Rust compiler は、型検査、effect 判定、move/borrow/lifetime、drop 挿入、raw memory provenance を後付けで積み重ねてきた。その結果、typecheck.rspasses/move_check.rs が巨大化し、修正ごとに局所的な summary や alias map を増やす構造になっている。

この文書は、静的検査を弱めずに、不必要な複雑化を解消するための大規模修正の仕様と実装計画を定める。目標は「検査を形だけ残す」ことではなく、memory safety、type safety、effect safety を compiler が一貫した中間表現で検査できる状態にすることである。

関連 issue:

現状の問題

1. HIR 直走査に検査責務が集中している

現在の move_check は HIR tree を直接走査しながら、local variable state、borrow state、field move、raw memory place、function raw effect summary、enum payload alias、aggregate field alias を同時に扱っている。これにより、ある経路を塞ぐたびに別の容器や関数境界に対応する補助 map が増える。

この構造では、次の問いに単一の答えを持てない。

  • この値は所有値か、borrow projection か、raw pointer か。
  • この storage の free obligation は誰が持つか。
  • この cell は initialized / moved / uninitialized のどれか。
  • この borrow はどの resource id に紐づくか。
  • この関数呼び出しは resource state をどう変化させるか。

2. MemPtr が複数の責務を兼ねている

MemPtr<T> は stdlib 上では Copy な non-owning pointer と説明されている。一方で、collection storage、single-cell owner、self-host outcome では owning storage handle としても使われている。

今後の方針は MemPtr を拡張し続けることではない。役割を次のように分ける。

役割型・IR 表現意味
non-owning pointerMemPtr<T>Copy 可能な projection。free obligation を持たない。
storage ownerOwnedRegion<T> / Storage<T>allocator が発行した free obligation owner。Copy 不可。
initialized cellInitializedCell<T> / Resource IR cell state値が入っている、move 済み、drop obligation が残る、を表す。
compiler capabilitycompiler-issued tokenstdlib code から forge できない resource id / provenance。

3. effect が surface 表現しか持たない

現行の effect は主に Pure / Impure であり、raw allocation や internal buffer mutation を「外部から観測できない内部効果」として扱う層がない。そのため raw primitive を単純に impure 化すると stdlib が広範囲に壊れ、逆に pure のままにすると safe source から raw memory discipline を構成できる。

必要なのは、内部効果と surface effect の分離である。

内部 effectsurface fold条件
InternalAllocPureraw identity / owner token が public surface へ漏れない。
PrivateState / PrivateCachemask 後だけ Purefresh private region が戻り値、public field、global、raw pointer、function identity へ escape しない。
UnsafeMemoryfold 不可明示 unsafe / compiler-owned boundary 内だけで許可する。
ExternalIOImpureI/O など外部観測可能な効果。
NondetImpure時刻、乱数、環境依存など。

4. drop 挿入と move check が別々に状態を推測している

drop_insertion は scope exit と structural field drop を見て drop を後付けする。move_check は別の走査で moved / borrowed / raw place state を推測する。この 2 つが同じ resource state を共有していないため、stdlib 側で drop loop を追加した場合に、将来の auto drop と衝突する危険がある。

目標仕様

検査の層

静的検査は次の依存方向に分ける。

責務出力
resolveimport、name、scope、overload candidate の収集resolved AST / symbol table
type inference型変数、trait capability、overload 決定typed HIR
effect inference関数 effect、internal effect、surface foldeffect signature
resource loweringHIR から resource operation へ変換Resource IR
resource checkmove、borrow、lifetime、initialized、drop obligation、raw provenancechecked Resource IR / diagnostics
drop elaborationResource IR 上で auto drop を挿入drop-elaborated Resource IR
backend loweringWASM / LLVM 用 HIR または backend IR へ変換backend input

後段は前段の内部実装へ戻ってはならない。特に resource check は typecheck.rs の local helper や HIR の表面的な call name 推測に依存しない。

Resource IR の最小モデル

Resource IR は CFG を持つ中間表現とし、少なくとも次を第一級に表す。

要素説明
ResourceId所有値、storage owner、borrow target を識別する compiler-owned id。
Placelocal、field、enum payload、tuple field、storage offset、projection を表す。
StorageIdallocator が発行した storage。byte range と layout plan を持つ。
CellStateUninit / Initialized(T) / Moved / Dropped / MaybeMoved
OwnerStatefree obligation の有無、owner token の移動状態。
BorrowStateshared borrow set、unique borrow、borrow lifetime end。
PointerProvenanceMemPtr projection の base resource、offset、unknown-offset 保守情報。
EffectOpinternal allocation、unsafe memory、external I/O、user call の resource effect。

MemPtr / Storage / InitializedCell の規則

  1. MemPtr<T> は non-owning pointer であり、Copy できる。
  2. MemPtr<T> の copy は free obligation を複製しない。
  3. Storage<T> / OwnedRegion<T> は Copy 不可であり、free obligation を持つ。
  4. Storage<T> の projection から MemPtr<T> を作れるが、MemPtr<T> から Storage<T> は作れない。
  5. initialized value を持つ cell を storage-only free することは禁止する。
  6. load<T>T: Copy の read と、non-Copy の move-out を分ける。
  7. store<T> は uninitialized cell の initialize と、initialized cell の overwrite を分ける。non-Copy overwrite は既存 value の drop/consume が証明された場合だけ許可する。
  8. raw address i32 は compiler-owned internal boundary 外へ出さない。移行中は既存 API を resource.cell.* / resource.owner.* / resource.raw.* / effect.* 系の検査で保守的に塞ぎ、cell state と owner obligation の原因分類を混ぜない。

function effect と resource summary

Resource IR 導入後の関数 summary は、現行の raw alias summary の延長ではなく、関数境界をまたぐ resource effect として表す。

  • 引数 resource の consume / borrow / projection。
  • 戻り値 resource の owner transfer / borrowed projection / copy value。
  • storage cell の initialized / moved / dropped 変化。
  • InternalAlloc が外部へ漏れたかどうか。
  • unknown callback は保守的に effect set を上げる。

function value、enum payload、aggregate field、branch merge を別々の alias map で扱わず、Resource IR の PlaceEffectOp に統合する。

実装計画

Stage 0: 現状固定と回帰境界の明確化

目的: 大規模修正中に安全検査を弱めないため、既存の暫定防壁を固定する。

作業:

  • tests/compiler/move_effect.n.md の raw ownership / raw effect regression を現行 baseline として維持する。
  • raw memory / borrow / function effect 関連の compile_fail に diag_code を可能な範囲で固定する。
  • node nodesrc/issues.js check と focused compiler test を CI / local の確認手順へ明記する。

commit 単位:

  1. test naming と出力 JSON baseline の整理。
  2. Resource IR 導入前提の regression 一覧更新。

Stage 1: module 境界の切り出し

目的: behavior を変えず、typecheck.rsmove_check.rs の責務境界を作る。

作業:

  • typecheck.rs から symbol/env、overload、trait lookup、effect inference、HIR lowering 補助を分割する。
  • move_check.rs から raw helper classifier、place/provenance 型、branch merge、function summary 型を分割する。
  • この段階では検査 semantics は変えない。

commit 単位:

  1. 型定義と helper の移動のみ。
  2. raw helper classifier の module 化。
  3. function summary / branch merge 型の module 化。
  4. diagnostics と tests の import path 調整。

Stage 2: Resource IR 型定義と dump の追加

目的: 新しい検査モデルを実装前に可視化する。

作業:

  • nepl-core/src/resource/ を作成し、ResourceModuleResourceFunctionResourceBlockResourceOpPlaceResourceState を定義する。
  • HIR から Resource IR へ lowering する skeleton を追加する。
  • 最初は enforcement しない dump / snapshot 用の IR として扱う。

commit 単位:

  1. Resource IR data structure。
  2. HIR lowering skeleton。
  3. dump / debug snapshot test。

Stage 3: Resource IR lowering の充実

目的: HIR の静的検査情報を Resource IR に移す。

作業:

  • local let/set、function call、branch、loop、match、aggregate construction、field projection を Resource IR op に下げる。
  • MemPtr projection、storage owner、raw load/store/dealloc/realloc/bulk copy を Resource IR op に下げる。
  • HIR 直走査の raw alias 推測と Resource IR lowering の結果を比較する debug check を追加する。

commit 単位:

  1. local / aggregate / branch lowering。
  2. raw memory operation lowering。
  3. function call / callback effect lowering。
  4. old checker との comparison diagnostics。

Stage 4: resource check への移行

目的: move/borrow/lifetime/drop obligation を Resource IR 上の検査へ移す。

作業:

  • CellStateOwnerState による move / initialized 検査を実装する。
  • BorrowState による shared / unique / lifetime end 検査を実装する。
  • branch / loop merge を Resource IR state merge に統一する。
  • old move_check は比較用に残し、差分がある場合は issue 化する。
  • Resource IR diagnostic を粗い互換 bucket へ押し込まず、compiler diagnostic 再設計計画に従って cell / owner / borrow / lowering の stable code を保持する。

commit 単位:

  1. initialized / moved state。
  2. owner token / free obligation。
  3. borrow / lifetime。
  4. branch / loop merge。
  5. old checker との gating 切り替え。

進捗:

  • 2026-04-29: Resource IR owner obligation gate が generic aggregate store/load regression を拒否していた件を再確認し、原因が compiler 側の false positive ではなく test helper の alloc_raw storage leak であることを切り分けた。generic helper は load<T> 結果を保持してから dealloc_raw する形へ直し、free obligation model を弱めずに generic aggregate 回帰を通した。List / HashMapRawMemoryLoadCell Uninit は stdlib raw-memory-backed collection / Resource IR lowering の別残件として扱う。
  • 2026-05-06: Resource IR cell gate を raw-memory cell operation 専用から通常 read/move/drop/call/construct/branch/match/return まで広げた。ResourceCheckDiagnostic::CellUnavailable はすべて resource.cell.* として compiler diagnostic へ写像され、old move checker が見逃した通常 cell-state violation も Resource IR boundary で止める。残る Stage 4 の主な未完了点は old move checker と HIR drop insertion の統合削除である。
  • 2026-05-06: run_move_check の実行順序を見直し、Resource IR lowering coverage / cell / borrow / effect / owner gate を旧 passes::move_check::run より先に実行するようにした。旧 checker は Resource IR gate 通過後の fallback 防壁として残す。これにより Resource IR diagnostic が legacy HIR diagnostic に fail-fast で隠される問題を解消した。回帰防止として nodesrc/test_resource_gate_order.js を source policy runner に追加した。残る Stage 4 の主な未完了点は、fallback として残る old move checker の削除と HIR drop insertion の Resource IR drop elaboration への統合である。
  • 2026-05-06: tests/compiler/move_effect.n.md を Resource IR / effect gate 後の authority に合わせ直し、pure raw operation は effect.pure.calls_impure、raw cell state は impure fixture、move 後の raw load は resource.cell.* で検証する形へ整理した。あわせて direct Result::Ok payload match を介した raw address alias で canonical address が新規束縛名へ揺れ、moved cell が uninit と誤診断される問題を RawCellAddressAliases の合流規則で修正した。
  • 2026-05-06: tests/compiler/move_check.n.md を Stage 4 Resource IR authority に合わせ直し、52/52 passing にした。field::get_ref は typed get_field_ref intrinsic と Resource IR Borrow lowering で field cell state を保持し、compiler-lowered add &owner offset も field projection として coverage / initialized check が扱う。Never value の branch / match arm は initialized-state merge から除外し、到達不能 path が reachable cell state を汚染しないようにした。残る Stage 4 の主な未完了点は、旧 passes::move_check::run fallback の削除と HIR drop insertion の Resource IR drop elaboration への統合である。
  • 2026-05-06: ISS-20260506T025727360Z-REMOVE-LEGACY-MOVE-CHECK-FALLBACK-AF-C143E79B として、compiler pipeline から旧 passes::move_check::run fallback を削除し、nepl-core/src/passes/move_check* も compiled pass から除去した。run_resource_static_check は Resource IR lowering coverage / cell / borrow / effect / owner gate だけを実行する。fallback 削除で露呈した deep prefix chain の owner gate 膨張は、user function return raw-address alias を lowering で二重 materialize していたことが原因だったため、plain user call の identity / owner transfer は Resource IR summary gate に一本化した。残る Stage 4 の主な未完了点は、HIR passes::insert_drops を Resource IR drop elaboration へ統合することである。
  • 2026-05-06: 旧 fallback 削除後の tests/compiler/move_check.n.md 52 件を Resource IR だけで通すため、borrow/lifetime gate は borrow token を aggregate / enum payload / field projection を含む prefix/suffix tree として伝播するようにした。Read / Move / Assign / Construct / Match bind / call return summary は exact local ではなく projected Place を基準に token を移す。branch / match arm の検査は外側 continuation を順序付きに見て、使用より前に token scope が終わる場合は外側 EndScope による過剰保持を避ける。これにより move_check.n.md は 52/52 passing になった。一方で move_effect.n.md は 105/110 で、raw address helper literal offset と higher-order / aggregate / enum payload function value raw write の effect/cell summary 残件があるため ISS-20260506T005443213Z-MOVE-EFFECT-DOCTESTS-ARE-STALE-AFTER-6955AAD2 を再オープンした。
  • 2026-05-06: ISS-20260506T005443213Z-MOVE-EFFECT-DOCTESTS-ARE-STALE-AFTER-6955AAD2 を再解決し、tests/compiler/move_effect.n.md は 110/110 passing になった。専用 lowering を持たない user helper について、return expression が引数由来の raw address projection だけで構成される場合に限り Resource IR lowering で透明な return projection を発行する。unknown impure indirect call は MemPtr / RegionToken 引数を保守的な raw cell store release requirement として summary に反映し、高階関数、aggregate field、enum payload に保存された callback raw write を caller 側の initialized cell state 上書きとして検出する。旧 HIR checker fallback は復活させない。
  • 2026-05-06: ISS-20260425T000000Z-RV-CORE-009-58589A3F の Stage 4 進捗として、compiler pipeline の Resource IR gate を HIR passes::insert_drops より前へ移した。Resource IR gate は typecheck 直後の未単相化 HIR 全体ではなく、drop 未挿入 source semantics を保持したまま monomorphize した reachable HIR を検査する。未単相化 HIR 全体を検査すると #target std の未使用 stdlib まで対象になり move_effect.n.md::doctest#108 が timeout するためである。deep prefix chain では HIR の再帰 clone() も stack overflow するため、Resource IR 用 HIR と codegen 用 HIR は clone ではなく typecheck を二度実行して分離する。残る Stage 4 の主な未完了点は、HIR passes::insert_drops 自体を Resource IR drop elaboration へ置き換え、この二重経路を統合することである。
  • 2026-05-06: Resource IR initialized/cell checker が EndScope で live non-Copy local を auto-drop state transition として扱うようにした。これにより、source Resource IR check は HIR passes::insert_drops の生成済み drop 式に依存せず scope exit の drop obligation を表現できる。同名・同型 shadowing では inner auto-drop が outer local を壊さないように、Resource IR lowering が有効範囲内の shadowed local place を x#N 形式で固有化する。残る Stage 4 の未完了点は、codegen 側の HIR passes::insert_drops を Resource IR drop elaboration の結果から生成する構造へ置き換えることである。
  • 2026-05-06: EndScope auto-drop を checker 内部の暗黙処理に閉じず、ResourceDropPlan / ResourceDropFunctionPlan / ResourceAutoDrop / ResourceAutoDropKind として明示データ化した。compute_resource_drop_plan は nested Branch / Loop / Match を含む Resource IR を走査し、non-Copy scope local の auto-drop 候補を列挙する。initialized/cell checker も同じ候補列挙を使うため、次に codegen 側の HIR passes::insert_drops を置き換える際に、checker と codegen が別々の drop 対象推定を持たない。
  • 2026-05-06: ResourceDropPlan の auto-drop 候補へ ResourceDropRequirement を追加し、StateOnly / WholeValue / DynamicEnumPayload / Structural を enum として分類するようにした。これにより、direct Drop impl、structural field Drop、runtime tag 依存の enum payload Drop を codegen 側が文字列や独自 flag で再推定しない。残る Stage 4 の未完了点は、この分類済み plan を実 drop call 生成へ接続し、HIR passes::insert_drops を削除することである。
  • 2026-05-06: HIR passes::insert_drops の内部に残っていた drop-needed 再推定を削除し、ResourceDropRequirement を消費する drop_lines_for_requirement へ統合した。旧 structural_drop_fields / structural_enum_field_drop_lines / type_needs_structural_drop は削除済みで、partial field move でも残存 field の requirement を enum match で扱う。残る Stage 4 の未完了点は、HIR scope walker 自体を Resource IR drop elaboration へ置き換え、compiler pipeline から passes::insert_drops を外すことである。
  • 2026-05-06: ResourceDropFunctionPlandrop_points を追加し、EndScope 単位の auto-drop group を保持するようにした。flat auto_dropsdrop_points から flatten した互換 view として維持する。これにより codegen 移行時に、nested block / branch / match の scope end を HIR 側で再推定せず、Resource IR の drop point を消費できる。残る Stage 4 の未完了点は、drop point を実 drop call 生成へ接続することである。
  • 2026-05-06: ResourceDropPointResourceDropPointPath を追加し、block id と Op / BranchThen / BranchElse / LoopCondition / LoopBody / MatchArm の enum step で EndScope の Resource IR 構造上の位置を保持するようにした。span だけに依存せず、codegen が typed path を辿れる形へ進める。残る Stage 4 の未完了点は、この path を実 drop call 挿入位置へ接続し、HIR scope traversal を削除することである。
  • 2026-05-06: ResourceDropPointPath を実際の Resource IR op へ解決する resolve_resource_drop_point_path / resolve_resource_drop_point_end_scope を追加した。無効 path は ResourceDropPointResolutionError enum で分類し、block 不在、op index 範囲外、container step と実 op の不一致、match arm 範囲外、EndScope 以外の選択を黙って無視しない。これにより drop point path は単なる metadata ではなく、codegen が消費前に検証できる typed insertion anchor になった。残る Stage 4 の未完了点は、この EndScope resolver を HIR/Wasm drop call 生成へ接続し、passes::insert_drops の scope walker を削除することである。
  • 2026-05-06: ISS-20260506T083026784Z-RESOURCE-IR-DROP-PLAN-LACKS-LIVE-DRO-358D2C7E として、candidate drop plan と live drop fact の混同を分離した。ResourceFunctionCheck::auto_drop_points は initialized-state traversal が実際に Initialized と判定して drop した point だけを保持し、move 済み outer local は live drop fact に出ない。あわせて non-Copy function parameter の EndScope anchor を Resource IR lowering に追加し、HIR insert_drops の outer parameter scope に残っていた drop obligation を Resource IR 上にも表現した。残る Stage 4 の未完了点は、この live drop fact を HIR/Wasm drop call 生成へ接続し、candidate plan ではなく checked state を codegen authority にすることである。
  • 2026-05-06: ISS-20260506T084621972Z-RESOURCE-IR-LIVE-DROP-FACTS-LACK-COD-9EB91BC5 として、ResourceDropElaborationPlan を追加した。これは candidate ResourceDropPlan ではなく、initialized-state checker が実際に auto-drop した ResourceFunctionCheck::auto_drop_points だけから作る codegen-facing plan である。構築時に function/check 対応、typed path の EndScope 解決、auto-drop place と EndScope locals の一致を ResourceDropElaborationPlanError enum で検証し、compiler pipeline でも Resource IR cell gate 直後に hard gate として実行する。残る Stage 4 の未完了点は、HIR passes::insert_drops の scope walker をこの checked live plan の消費側へ置き換えることである。
  • 2026-05-06: ISS-20260506T090109381Z-RESOURCE-DROP-ELABORATION-PLAN-LACKS-82B39C85 として、drop elaboration plan に source binding 名を持たせた。Resource IR lowering は DeclareLocalsource_name を記録し、shadowed local の内部 place が x#... になっても backend/HIR が参照する source 名 x を失わない。ResourceDropElaborationDrop は checked place、source_name、drop requirement を一体で保持し、binding が解決できない場合は MissingDropBinding enum error で hard gate する。残る Stage 4 の未完了点は、この source binding 付き plan を実際の HIR/Wasm drop call 挿入へ接続することである。
  • 2026-05-06: ISS-20260506T091634072Z-RESOURCE-DROP-ELABORATION-CANNOT-BRI-88F5F95B として、monomorphized Resource IR function から source HIR function へ戻すための origin_name metadata を追加した。HirFunction は typecheck 時点の source 関数名を保持し、monomorphize で name が specialized symbol へ変わっても origin_name は維持される。ResourceFunctionResourceDropElaborationFunctionorigin_name を持つため、次の HIR/Wasm drop call 生成は mangled name の prefix parsing ではなく構造化 metadata で source function と対応できる。残る Stage 4 の未完了点は、この function origin / source binding / checked drop point を消費して HIR passes::insert_drops を削除することである。
  • 2026-05-06: ISS-20260506T093453445Z-RESOURCE-DROP-ELABORATION-PLAN-IS-DI-E004B013 として、run_resource_static_check が checked ResourceDropElaborationPlan を返し、PreparedProgram がそれを保持するようにした。これにより plan は gate で検証されて捨てられる metadata ではなく、codegen bridge が消費する compiler pipeline artifact になった。残る Stage 4 の未完了点は、この prepared plan を HIR/Wasm drop call 生成に渡し、旧 passes::insert_drops の scope walker を削除することである。
  • 2026-05-06: ISS-20260506T094754766Z-RESOURCE-DROP-ELABORATION-PLAN-LACKS-5D3C7F54 として、checked drop plan が source HIR 側の origin / binding / scope span へ戻せることを validate_resource_drop_elaboration_hir_bridge で検証するようにした。compiler pipeline は HIR passes::insert_drops の前にこの bridge gate を実行し、欠落は ResourceDropElaborationHirBridgeError enum から resource.lower.incomplete へ写像する。残る Stage 4 の未完了点は、この bridge 済み plan を実際の HIR/Wasm drop call 生成へ渡し、旧 scope walker の drop 対象推定を削除することである。
  • 2026-05-06: ISS-20260506T104708173Z-RESOURCE-IR-LOWERING-TREATS-CALLABLE-02721744 として、裸の callable value reference が HirExprKind::Var として Resource IR lowering に届いた場合でも、active local binding がなければ typed origin_name / function type から canonical function symbol を解決し、ResourceOp::FunctionValue として lowering するようにした。HIR coverage gate も同じ local-shadowing-aware callable rule へ更新し、coverage の scope state は coverage_hir_scope.rs に分離した。これにより function value を未初期化 local と誤診断せず、cell checker を弱めずに first-class function / branch return / lambda 系の false positive を解消する。残る Stage 4 の未完了点は、bridge 済み drop elaboration plan を HIR/Wasm drop call 生成へ接続し、旧 passes::insert_drops の scope walker を削除することである。
  • 2026-05-06: ISS-20260506T111001704Z-RESOURCE-DROP-ELABORATION-PLAN-OMITS-C984305E として、set / Assign による initialized non-Copy target の上書き前 Drop obligation を ResourceAutoDropKind::AssignmentOverwrite として明示した。initialized-state traversal は target が到達時点で Initialized の場合だけ live overwrite drop fact を記録し、move 済み target の再初期化では記録しない。ResourceDropElaborationPlan は assignment path を typed resolver で検証し、source HIR bridge も set span / target binding を確認する。残る Stage 4 の未完了点は、ScopeLocal と AssignmentOverwrite の両方を消費して実 drop call を生成し、旧 passes::insert_drops の VarState scope walker を削除することである。
  • 2026-05-06: ISS-20260506T113709479Z-RESOURCE-DROP-ELABORATION-PLAN-IS-NO-6CFFA860 として、compiler pipeline の実 drop call 生成を checked ResourceDropElaborationPlan consumer へ置き換えた。passes::insert_resource_dropsResourceAutoDropKind::ScopeLocal / AssignmentOverwrite を enum で分岐し、ResourceDropRequirement の exhaustive match から Drop call / structural field Drop / dynamic enum payload Drop を生成する。旧 HIR VarState / var_stacks scope walker と passes::insert_drops 呼び出しは削除済みであり、drop 対象を HIR から再推定する二重 authority は残さない。prepare_module_for_codegen_with_source_map は drop 未挿入の monomorphized HIR を Resource IR check し、その同じ HIR へ plan-based drop insertion を行い、final monomorphize で生成 Drop trait call を解決する。後挿入された Drop call の impl method body が欠落しないよう、monomorphize_internalHirModule.impls に保持されている impl method function も function table へ再登録する。Stage 4 の主な残件は、この新 authority で full review / regression を通し、Stage 5/6 の raw memory / stdlib public API 境界へ進めることである。
  • 2026-05-16: ISS-20260516T074901579Z-RESOURCE-IR-ASSIGNMENT-OVERWRITE-SKI-265F0C40 を解決した。assignment overwrite の live drop fact 生成が whole target Initialized の場合だけに限定され、部分 move 済み aggregate の残存 initialized field を上書き前に drop できない問題だった。修正後は scope end と同じ partial_drop_requirement_for_initialized_descendants を assignment overwrite にも使い、ResourceDropRequirement::Structural として残存 field drop を checked plan へ記録する。move 済み target の再初期化は StateOnly の場合に drop fact を出さないため、余計な drop は挿入しない。
  • 2026-05-06: ISS-20260425T000000Z-RV-CORE-009-58589A3F の完了監査として、compiler pipeline に旧 passes::move_check::run fallback と旧 passes::insert_drops 呼び出しが残っておらず、checked ResourceDropElaborationPlaninsert_resource_drops で消費されることを再確認した。この親 issue は Resource IR authority 化完了として fixed にし、raw-memory-backed stdlib API / MemPtr owner token 分離 / collection drop obligation は既存 Stage 5/6 issue で追跡する。監査中に deep-prefix check_pipeline focused regression が local 240 秒 budget を超えたため、compile-time complexity / regression sizing 問題を ISS-20260506T154254968Z-RESOURCE-AUTHORITY-DEEP-PREFIX-REGRE-14D21232 として分離した。
  • 2026-05-06: ISS-20260506T154254968Z-RESOURCE-AUTHORITY-DEEP-PREFIX-REGRE-14D21232 を解決した。通常 i32 copy を raw-address alias group として seed していた copy_alias_or_seed を廃止し、既存 raw relation だけを伝播する copy_alias_if_tracked と、RawAddressAlias / RawAddressView だけが seed する copy_explicit_raw_address_alias に分けた。raw memory address の local origin は alias group ではなく value-origin fact として保持し、canonicalize 時にだけ使う。さらに transparent raw-address return lowering は bare i32 parameter return を raw helper とみなさず、add / sub / mem_ptr_* / region_* など raw-address operation の operand に限定した。これにより deep-prefix Resource IR static check は 240 秒 timeout から 9.33 秒、prepare_codegen は 9.39 秒へ戻り、higher-order function value raw write regression は維持した。Stage 4 authority path の残件は、full review / regression を継続しつつ Stage 5/6 の raw memory boundary と stdlib public API 分離へ進むことである。
  • 2026-05-06: ISS-20260506T130126516Z-RESOURCE-OWNER-SUMMARIES-REJECT-FS-A-7E58243F として、owner summary の false positive を checker 緩和ではなく Result owner effect の materialization と同一 storage replacement の明示で修正した。branch / match / return 境界では pending Result payload owner transfer を外側 state に渡す前に実体化し、unconditional consumption と variant-conditioned consumption の二重消費を避ける。fs/stdio private scratch は checked API の Err 握りつぶしではなく internal raw boundary の exact dealloc_raw に統一した。残る Stage 4 の主な残件は、ISS-20260430T012045983Z-RESOURCE-IR-CANNOT-SUMMARIZE-RETURNE-2FDA4B38 の dynamic initialized range summary と、ISS-20260506T134653279Z-RESOURCE-OWNER-SUMMARY-MISSES-RAW-DE-007EB7EAunwrap_ok dealloc checked consumption summary である。
  • 2026-05-06: ISS-20260506T134653279Z-RESOURCE-OWNER-SUMMARY-MISSES-RAW-DE-007EB7EA として、unwrap_ok のような reachable Result::Ok arm だけを返す helper を resolved_parameter_variants summary として表現した。summary 収集は Read / Move / local initializer / assignment の透明な値 alias を辿り、expr LocalRead などの注釈 op では alias を消さない。一方で call / construct / borrow / raw / match output は変換値として alias を切る。これにより deallocResult::Ok success branch に保留された owner consume が unwrap_ok dealloc 経由で呼び出し元の raw owner に適用され、checked cleanup API を raw API へ落とさずに false positive を解消した。残る Stage 4 の主な残件は、ISS-20260430T012045983Z-RESOURCE-IR-CANNOT-SUMMARIZE-RETURNE-2FDA4B38 の dynamic initialized range summary である。
  • 2026-05-06: ISS-20260506T172012873Z-RESOURCE-IR-DYNAMIC-RAW-ADDRESS-VIEW-77E94B53 として、dynamic raw address view が stable local origin を失う問題を修正した。ValueOrigin を exact place だけでなく prefix にも適用し、tmp[+?]%pref[+?] のような stable origin plus suffix へ正規化する。通常 i32 copy は raw alias group を seed しないため、deep-prefix alias explosion を再発させずに、fill_i32 pref pref_len 0 の dynamic initialized Copy range と後続の別 read 由来 load_i32 add pref off が同じ cell fact を参照できる。kpread_to_kpwrite_prefixsum_i32resource.cell.uninit blocker は解消し、次の別件として fs/stdio scratch dealloc の resource.owner.no_free_obligationISS-20260506T172100644Z-FS-AND-STDIO-SCRATCH-RAW-DEALLOC-LOS-57895CB4 に分離した。親 issue ISS-20260430T012045983Z-RESOURCE-IR-CANNOT-SUMMARIZE-RETURNE-2FDA4B38 は、length/guard と結び付いた dependent range summary の残件として open のまま維持する。
  • 2026-05-07: ISS-20260506T172100644Z-FS-AND-STDIO-SCRATCH-RAW-DEALLOC-LOS-57895CB4 を解決した。原因は stdlib cleanup ではなく、RawMemory::Alloc temporary から local / enum payload / field へ owner transfer した後に RawCellAddressAliases::move_owner_aliases が owner mark だけを移し、raw owner value の alias group を再作成していなかったことだった。moved target と moved marked projection を再度 alias group に入れることで、通常 i32 copy は raw alias group を seed しない方針を維持しつつ、owner mark 済み storage root の exact read copy だけが dealloc_raw の free obligation へ解決される。fs_open_with_flags__fs_read_fd_bytes__stdio_read_all_bytes_result__stdio_write_fd_mem_result__ の scratch owner diagnostics を固定する Resource IR 回帰を追加し、kpread_to_kpwrite_prefixsum_i32 も通過した。Stage 4 authority path の残件は full review / regression と、Stage 5/6 の raw-memory-backed stdlib API 境界整理へ移ることである。
  • 2026-05-07: ISS-20260506T173138867Z-RESOURCE-RAW-ADDRESS-LOWERING-EXCEED-B64EB6D1 を解決した。lower_raw_address.rs から transparent user return projection の解析を lower_raw_address_return.rs へ分離し、raw wrapper / actual call semantics と user return-expression classification の責務を分けた。nodesrc/test_resource_checker_responsibility.js には新 module の存在、mod 宣言、line limit、主要 entry point を追加した。これにより lower_raw_address.rs は 620 line limit を下回った。source policy は次の別件として initialized_alias.rs の責務集中に到達したため、ISS-20260506T180609091Z-RESOURCE-INITIALIZED-ALIAS-MODULE-EX-BA05D57A に分離した。
  • 2026-05-07: ISS-20260506T180609091Z-RESOURCE-INITIALIZED-ALIAS-MODULE-EX-BA05D57A を解決した。RawCellAddressAliases から stable value origin を initialized_alias_origin.rs へ、i32 value / condition fact store を initialized_alias_scalar.rs へ分離した。raw address alias group と owner cell canonicalization は initialized_alias.rs に残し、branch merge は alias group / origin / scalar fact の各責務へ委譲する。これにより memory-safety-critical な raw owner alias table と、補助的な value-origin / condition fact が同一 file に再集中しない。source policy は Resource IR checker responsibility を warning 0 で通過した。
  • 2026-05-12: ISS-20260512T033056386Z-RESOURCE-OWNER-SUMMARIES-MATERIALIZE-BAE331D3 を解決した。Result payload owner が generic ok / err helper 経由で通常 projection_returns に残り、caller で runtime 不可能な Ok / Err payload owner まで同時に materialize される問題を、複数 variant payload が混在する projection return だけの variant return 正規化で修正した。あわせて raw owner summary alias walk は read / DeclareLocal / branch / match bind の projection suffix と RawMemoryOp::Store value consumption を保持し、Result::Ok.field0 や raw node field に移した owner seed を見落とさない。EndScope owner auto-drop は str などの状態所有 leaf を落としつつ、i32 raw address / MemPtr のような非所有 pointer を StateOnly として自動消費しないため、実 drop code が存在しない raw owner leak を隠さない。Stage 4 Resource IR owner summary は resolved variant と owner materialization の境界がより明確になった。
  • 2026-05-07: ISS-20260506T130138471Z-KP-STREAM-SCANNER-FLOAT-DOCTESTS-EXC-0D4A3BF8 を解決した。KP doctest timeout の主因は stdlib runtime ではなく、Resource IR summary builder が caller/callee 依存を見ずに全関数を全反復で再計算していた compile-time complexity だった。initialized / owner summary は in-place fixed point 更新と関数 summary dependency worklist に移行し、direct call / function value / nested branch / loop / match / self recursion の依存抽出を単体回帰で固定した。NEPL_COMPILE_STAGE_TIMING=1 の host-only stage timing で resource_static_check は約 15.9 秒から約 6.7 秒へ低下し、tests/stdlib/kp.n.md focused suite は 7/7 passing になった。Stage 4 authority path の残件は、full review / regression を継続しつつ、残る compile-time hot path を別 issue として必要に応じて切り分けることである。
  • 2026-05-07: ISS-20260506T201433509Z-RESOURCE-CONDITION-FACTS-DROP-NONZER-5EE6B7A6 を解決した。ResourceConditionFact に typed I32RelationResourceI32RelationOp を追加し、lt i len のような nonzero relational guard を Resource IR に残す。zero-value fact は owner / realloc refinement 用に維持し、relation fact は exhaustive match で明示的に扱う。これは ISS-20260430T012045983Z-RESOURCE-IR-CANNOT-SUMMARIZE-RETURNE-2FDA4B38 の returned raw header range summary に必要な typed precondition であり、残件は relation fact と symbolic raw offset を結び付ける range model である。
  • 2026-05-07: ISS-20260506T202600181Z-RESOURCE-RAW-OFFSETS-ERASE-SYMBOLIC--E5DDB5A0 を解決した。ResourceOffset { bytes: Option<usize> } に known byte offset / dynamic index / unknown wildcard を混在させる設計をやめ、ResourceOffset::Known / Symbolic / Unknown の enum に分離した。RawAddressOffset も simple dynamic offset place を Symbolic として保持し、mem_ptr_add ptr idxbase[+symbolic] として Resource IR に残る。general overlap 判定は Symbolic / Unknown を may-overlap として安全側に維持するため、静的検査を緩めずに後続 range summary の identity 情報だけを失わない。Stage 4 の残件は、I32RelationResourceOffset::Symbolic を照合して initialized byte range を typed fact として伝播する本体実装である。
  • 2026-05-07: ISS-20260506T203942617Z-RESOURCE-BRANCH-PATHS-DO-NOT-RETAIN--4242E13D を解決した。ResourceConditionFact::I32Relation を branch path の I32RelationFacts に保存し、truthy branch は元 relation、false branch は negated relation として保持する。relation fact は value / unary condition から分離しつつ copy / prefix replacement / clear / merge の対象になり、query は reversed relation も扱う。これにより後続 range summary は HIR 条件式を再走査せず Resource IR state から i < len / i >= len を問い合わせられる。Stage 4 の残件は、保存済み relation fact と ResourceOffset::Symbolic を cell availability / initialized range fact へ接続することである。
  • 2026-05-07: ISS-20260506T210407334Z-INITIALIZED-RESOURCE-BRANCH-PATHS-DO-F88296F7 を解決した。owner checker だけでなく initialized checker の branch path でも record_condition_fact_value_constraints を適用し、then / else の RawCellAddressAliases に typed condition fact を反映する。既存 realloc condition handling はその後に適用するため、realloc 成否と relation proof の両方が path state に残る。Stage 4 の残件は、この initialized checker から参照可能になった relation proof と ResourceOffset::Symbolic を raw memory load の availability 判定へ接続することである。
  • 2026-05-07: ISS-20260506T211740745Z-SYMBOLIC-COPY-STORES-ERASE-UNKNOWN-O-0BD91F6C を解決した。RawMemoryOp::Store の汎用 clear を store 専用の typed clearing に分け、symbolic Copy store が pref[+?].deref の initialized Copy fact を過剰に消さないようにした。non-Copy / moved / uninit state は従来どおり保守的に消すため、memory safety の緩和ではない。Stage 4 の残件は、loop condition fact と guarded initialized range summary を接続して、明示 proof のある dynamic raw load だけを通すことである。
  • 2026-05-07: ISS-20260506T212446487Z-RESOURCE-LOOPS-DO-NOT-CARRY-TYPED-CO-FD0086F2 を解決した。ResourceOp::Loopcondition_fact を追加し、while lt i len のような typed relation guard を Branch と同じ ResourceConditionFact::I32Relation として Resource IR に保持する。initialized / owner checker は condition evaluation 後、body path に truthy fact、exit path に negated false fact を適用してから state merge するため、loop body の range summary が HIR 条件式を再走査せず RawCellAddressAliases から i < len を問い合わせられる。Stage 4 の残件は、保持された loop relation fact と ResourceOffset::Symbolic を raw cell availability / initialized range fact へ接続することである。
  • 2026-05-07: ISS-20260506T215615927Z-RESOURCE-RAWADDRESSVIEW-TREATS-ORDIN-B3C620DA を解決した。RawAddressView は lowering で add / sub から広めに生成されるため、checker 側で既存の raw-address proof がある場合だけ raw alias / non-owning view として扱う。proof は alias table の exact/prefix raw address、initialized checker の raw cell / owned raw storage / external raw storage、owner checker の owner state / storage origin に限定し、scalar ValueOrigin だけでは raw pointer とみなさない。さらに storage-offset view を local に束縛しても pref[+?].deref の broad initialized fact を view local へ rekey しない。これにより unrelated impure i32 arithmetic が raw alias state を seed せず、fill_i32 pref pref_len 0 後の symbolic load と kpread_to_kpwrite_prefixsum_i32 は通過する。Stage 4 の残件は、returned header / length field / guard relation をまたぐ dependent initialized range summary を typed model として表現することである。
  • 2026-05-07: ISS-20260506T203121413Z-COMPILER-STATIC-CHECKER-TIMES-OUT-ON-5B942F4A を解決した。self-host lexer の empty lex_all_with_file_id smoke で resource_initialized_moves に入る前に止まっていた原因は、raw cell address return summary が idx / file_id のような通常 i32 parameter まで raw address seed として扱い、token construction と branch merge を通じて bogus alias を膨張させていたことだった。summary 計算を SummaryWorklist に移行し、seed 対象を MemPtr / RegionToken / それらを含む aggregate / reference に限定した。明示的な RawAddressAlias / RawAddressView は引き続き raw relation を作れるため、raw helper の正当な i32 address return は lowering の typed ResourceOp が authority になる。timeout は owner diagnostics まで進む状態に改善し、残る lexer owner flow は ISS-20260506T224618064Z-SELF-HOST-LEXER-OWNER-FLOW-FAILS-AFT-23CB5BBE として分離した。Stage 4 の残件は、compiler summary の計算量を抑えたまま Resource owner diagnostics の正確性を維持し、self-host lexer の owner transfer を通すことである。
  • 2026-05-07: ISS-20260507T052014018Z-RESOURCE-IR-RETURNED-AGGREGATE-FIELD-F78CD903 を解決した。returned aggregate の buf / len field をまたぐ initialized raw range が caller local へ束縛される時に失われていた原因は、値コピーが range count だけを複写し、address / count の dependent pair を同時に projection copy していなかったことだった。CellTable::copy_initialized_raw_byte_ranges_through_valuecell_state_raw_range_value.rs に追加し、DeclareLocal / Read / Assign / Move / branch / match / raw memory Load / raw memory Store / aggregate Construct で initialized range の address と count を value projection として複写する。assignment / raw memory store では overwritten target 配下の stale range fact を消す。guard なし symbolic load は引き続き拒否し、0 <= i && i < len が Resource IR relation fact として証明された場合だけ通すため、静的検査の正確性は緩めていない。責務分割 policy は緩めず、追加 helper と既存 cover test を module 分離した。Stage 4 の残件は、returned aggregate projection 修正後も残る full scanner-style の fd_read loop / realloc / capacity field を含む dependent range model と、別件 ISS-20260507T054543555Z-INITIALIZED-EXTERNAL-IO-EFFECT-EXCEE-5C420730 の external I/O effect helper 分割である。
  • 2026-05-07: ISS-20260507T054543555Z-INITIALIZED-EXTERNAL-IO-EFFECT-EXCEE-5C420730 を解決した。fd_read / fd_pread の single-iov payload range construction を initialized_external_io_payload.rs に分離し、initialized_external_io_effect.rs は external I/O effect entry point と nread exact-cell initialization に戻した。iovec descriptor 探索、single-iov 判定、payload alias filtering、nread を count とする InitializedRawRangeUnit::Bytes 登録は新 module が担当する。line limit は緩めず、node nodesrc/test_resource_checker_responsibility.js は passed になった。Stage 4 の残件は、full scanner-style の fd_read loop / realloc / capacity field を含む dependent range model である。
  • 2026-05-07: ISS-20260507T051545017Z-CELL-STATE-RAW-RANGE-EXCEEDS-SPLIT-L-76536EAC を fixed として整理した。cell_state_raw_range.rs の責務超過は、raw range mutation / value projection / guarded cover proof / cover test を module 分離した結果、129/140 lines まで戻っている。node nodesrc/test_resource_checker_responsibility.jsnode nodesrc/run_source_policy_regressions.js --warn-only はどちらも warning なしで通過しており、line limit を上げる形の回避はしていない。Stage 4 の残件は、full scanner-style の fd_read loop / realloc / capacity field を含む dependent range model である。
  • 2026-05-07: ISS-20260430T012045983Z-RESOURCE-IR-CANNOT-SUMMARIZE-RETURNE-2FDA4B38 を解決した。full scanner-style の fd_read loop / realloc_raw / returned header capacity field をまたぐ initialized raw range は、sub next_cap cap の typed scalar difference fact、append fill range composition、raw alias aware branch/loop/match range merge、canonicalize_scalar による count と non-owning pointer view の分離で表現する。guard なし symbolic load は引き続き拒否し、caller 側は 0 <= i && i < len && i < cap が Resource IR fact として証明される場合だけ load_u8 add data i を許可する。Stage 4 の残件は、Resource IR authority path の full review / regression と、以後発見された owner / effect / borrow の個別 issue 解決である。
  • 2026-05-07: ISS-20260507T050025343Z-SHA256-HASH-DOCTEST-FAILS-RESOURCE-I-A4EE25CE を解決した。match payload binding が外側 local / parameter を shadow した場合、Resource IR lowering が payload 初期化対象を %e、arm body の参照を %e#0 に分裂させ、sha256_rounds_loopResult::Err eresource.cell.uninit と誤診断していた。match arm binding は ctx.declare_local が返す固有 Place を checked authority とし、drop elaboration bridge 用の source binding 名は bind_source_name として別に保持する。checker の cell-state 判定は緩めず、shadowed Copy payload と non-Copy payload drop bridge の Rust 回帰、および SHA-256 known-vector doctest で固定した。Stage 4 の残件は、full scanner-style の dependent range model と、Resource IR authority path の継続的な full regression である。
  • 2026-05-07: ISS-20260427T152958303Z-MEMPTR-AND-REGIONTOKEN-LACK-COMPILER-0BC8ECDF の部分対応として、str_addr と borrowed region_ptr の lowering を RawAddressViewKind::NonOwningProjection として表現するようにした。RawAddressViewKind::Offset と分けることで、通常 i32 arithmetic の raw pointer proof gate は維持しつつ、仕様上 non-owning な pointer projection は source 未解決でも dealloc / realloc の owner として扱わない。mem_ptr_addrstr_from_addr_unchecked の owner transfer 経路は残しており、静的検査を緩めずに str_addr helper 経由の free bypass を拒否する。Stage 4 の残件は、MemPtr = non-owning pointerOwnedRegion/Storage = free obligation owner の最終分離である。
  • 2026-05-07: ISS-20260507T085434323Z-RESOURCE-OWNER-CHECKER-LOSES-NON-OWN-344F2372 を解決した。str_addr 由来の non-owning raw address view は direct local では owner として拒否されていたが、Result::Ok などの aggregate payload に入れてから match bind / read を通ると non-owning raw view fact が落ちていた。Resource IR owner summary は payload projection に non-owning raw view marker を生成できるため、summary 生成を緩めるのではなく、RawAddressViewTable で通常 raw address view と non-owning raw address view を分け、construct / branch / match / call return summary / read の value-preserving owner-flow に non-owning fact copy を接続した。これにより OwnerState::NoFreeObligation を pointer authority として流用せず、MemPtr = non-owning pointerOwnedRegion/Storage = free obligation owner の分離方針を弱めず、payload 経由の dealloc_raw / realloc_rawOwnerUnavailable で拒否する。Stage 4 の残件は、Resource IR authority path の full review / regression と、stdlib public API 側の owner token 分離である。
  • 2026-05-07: ISS-20260507T125821563Z-RESOURCE-INITIALIZED-SUMMARY-MODEL-E-992DF2EE を解決した。returned / param / variant param の raw byte range と KnownI32 / projection count enum を initialized_summary_byte_range_model.rs へ分離し、initialized_summary.rs を function summary と raw cell/variant requirement contract に戻した。line limit は緩めていない。Stage 4 の残件として、次に露出した initialized_summary_apply.rs の responsibility split を ISS-20260507T130937432Z-RESOURCE-INITIALIZED-SUMMARY-APPLY-E-7FFA13D6 で追跡する。
  • 2026-05-07: ISS-20260507T130937432Z-RESOURCE-INITIALIZED-SUMMARY-APPLY-E-7FFA13D6 を解決した。caller-side param cell / param byte range application と RawCellInitializationParamCount の解決を initialized_summary_apply_param.rs へ分離し、initialized_summary_apply.rs を summary lookup と application orchestration に戻した。Stage 4 の残件として、次に露出した initialized_summary_byte_ranges.rs の builder 分割を ISS-20260507T131613193Z-RESOURCE-INITIALIZED-SUMMARY-BYTE-RA-F56D00D0 で追跡する。
  • 2026-05-07: ISS-20260507T131613193Z-RESOURCE-INITIALIZED-SUMMARY-BYTE-RA-F56D00D0 を解決した。returned / param raw byte range builder と count-source extraction を 4 module に分離し、initialized_summary_byte_ranges.rs の集中を削除した。Stage 4 の残件として、次に露出した initialized_summary_variant_build.rs の分割を ISS-20260507T132339456Z-RESOURCE-INITIALIZED-SUMMARY-VARIANT-32AEE691 で追跡する。
  • 2026-05-07: ISS-20260507T132339456Z-RESOURCE-INITIALIZED-SUMMARY-VARIANT-32AEE691 を解決した。variant param cell / byte range の uniqueness helper を initialized_summary_variant_unique.rs へ分離し、initialized_summary_variant_build.rs を variant return path traversal と variant-gated summary construction に戻した。node nodesrc/test_resource_checker_responsibility.jsnode nodesrc/run_source_policy_regressions.js --warn-only は warning なしで通過しており、Stage 4 ResourceIR proof module の責務分割 policy は現時点で緑である。
  • 2026-05-07: ISS-20260507T134613401Z-RESOURCE-OWNER-SUMMARY-IGNORES-NON-O-9A39F228 を解決した。str_addr 由来の non-owning raw view を mem_ptr_wrap / region_newRegionToken に詰め直し、dealloc_region の helper parameter consumption 経由で free obligation owner に見せる経路を拒否する。callee owner summary が consumed parameter projection を要求する場合、caller actual が non-owning raw address view なら resource.owner.no_free_obligation を出すようにし、owner consumption の責務は owner_consumption.rs に分離した。これは MemPtr = non-owning pointerOwnedRegion/Storage = free obligation owner の分離を Stage 4 owner summary 適用境界へ拡張する対応である。
  • 2026-05-07: ISS-20260507T143247279Z-RESOURCE-IR-OWNER-CHECKER-LOSES-NON--66D5734F を解決した。region_ptr_at<T,U>Result::Ok(MemPtr<U>) payload は borrowed RegionToken 由来の bounds-checked non-owning projection だが、stdlib 実装が region_token_ptr_ref / mem_ptr_addr / mem_ptr_wrap / Result::Ok を経由するため owner summary に non-owning view fact が残らず、region_new で forged owner token に見せられた。region_ptr_at の Ok payload raw field と borrowed region_token_ptr_ref の raw field を Resource IR lowering 時点で NonOwningProjection として表現し、coverage gate は reference projection の HIR/ResourceIR 対応を保ったまま RawAddressView target を alias metadata として扱うようにした。これにより region_ptr_at の正常な pointer read/write と元 token の dealloc は維持しつつ、Ok payload を owner に昇格する経路は resource.owner.no_free_obligation で拒否する。Stage 4 の残件は、compiler-issued owner token と stdlib public API の最終分離である。
  • 2026-05-13: ISS-20260512T202418246Z-RESOURCE-OWNER-POLICY-DOES-NOT-GUARD-2B46D8D5 を解決した。Stage 4 の NonOwningProjectionMemPtr projection が free obligation owner に戻らないための compiler-side 境界だが、source policy はこれまで enum の存在と module 分割しか見ていなかった。nodesrc/test_resource_checker_responsibility.jsraw_address_view_carries_owner_aliasnon_owning_raw_view_return_kind の match arm を直接監視し、RawAddressViewKind::NonOwningProjection => falseRawAddressViewOwnership::NonOwningProjection => ProjectionView を wildcard なしで固定した。これにより MemPtr = non-owning pointerOwnedRegion/Storage = free obligation owner の分離を regression policy として維持する。
  • 2026-05-13: ISS-20260512T202946482Z-TYPECHECK-CONSTRUCTOR-CAPABILITY-BOU-14965EAB を解決した。MemPtr / RegionToken の direct constructor restriction は compiler-issued raw pointer / owner token capability の入口であり、後段 Resource IR だけに任せると forged token が typed HIR に残る。nodesrc/test_static_check_boundary_responsibility.jsStructConstructorPolicy / RestrictedStructConstructor enum、raw-memory-boundary based の MemPtr => RawPointer / RegionToken => OwnerToken 分類、apply_struct_constructorRawMemoryBoundaryOnly gate、個別 diagnostic code への分岐を監視する。これにより Stage 4 の owner capability boundary を typecheck source policy でも維持する。
  • 2026-05-13: ISS-20260427T152958303Z-MEMPTR-AND-REGIONTOKEN-LACK-COMPILER-0BC8ECDF を compiler core 側では fixed / resolved とした。MemPtr / RegionToken direct constructor boundary、NonOwningProjection raw view、StorageOrigin::Owned、returned owner summary、helper consumption gate、source policy が揃い、fixed raw address や borrowed projection を free obligation owner に偽装する主要経路は Resource IR / typecheck で拒否される。tests/stdlib/memory_safety.n.md は 23/23、tests/compiler/move_effect.n.md は 110/110、region_token_forged は 6/6 passing である。残る core/mem public API、collection/string/self-host buffer の safe public discipline は Stage 6 stdlib issue へ分離して継続する。
  • 2026-05-14: ISS-20260514T054314434Z-COPY-IMPL-CAN-MARK-COMPILER-OWNER-TO-D6C08048 を解決した。RegionToken<T> は構造上 MemPtr<T>i32 に見えるが、free obligation を持つ compiler owner token なので Copy capability target にはできない。Copy impl target validation は StructConstructorPolicy::RawMemoryBoundaryOnly(OwnerToken) を参照し、compiler-owned owner token だけを type.copy_impl.target_not_copy で拒否する。同名 user struct は struct table の type identity と policy が一致しないため通常の構造的 Copy 判定に残る。これにより MemPtr = non-owning pointerRegionToken/OwnedRegion = free obligation owner の分離を trait capability layer でも維持する。
  • 2026-05-13: ISS-20260513T230312662Z-RESOURCE-OWNER-VARIANT-RETURN-MODULE-817EC208 を解決した。owner_summary_variant_return.rs は returned owner source collection と variant payload return materialization を同居させていたため、returned value / descendant / alias descendant から owner source を集める処理を owner_summary_variant_return_sources.rs へ分離した。分離後に露出した owner_variant_utils.rs の責務超過も、OwnerValueCondition truth evaluation を owner_variant_condition_truth.rs へ移して解消した。line limit は緩めず、新 module も nodesrc/test_resource_checker_responsibility.js の監視対象に入れ、Resource IR owner summary / pending variant owner effect の監査境界を維持した。
  • 2026-05-07: ISS-20260507T143850332Z-CLI-CHECK-DOES-NOT-RUN-RESOURCEIR-ME-D1F139FF を解決した。check_module_with_source_map は typecheck で止まらず、compile preparation と同じ非再帰 prepare phase を共有して Resource IR lowering coverage、initialized cell、drop plan、borrow、effect、owner、drop bridge gate を通す。--check は成果物 emission には進まないが、compile/codegen pipeline と同じ memory/resource safety authority を通るため、CI や selfhost tooling が check-only を使っても Resource IR diagnostic を取りこぼさない。deep prefix regression と CLI Resource IR regression で、stack overflow 回避と static gate enforcement の両方を固定した。
  • 2026-05-12: ISS-20260512T032320909Z-RESOURCE-OWNER-SUMMARY-REPORTS-STDIO-C9FC40C9 を解決した。print_i32 / ansi_text_style_code で露出した str temporary の resource.owner.maybe_leak は、stdio が str を消費すべきという問題ではなく、Resource IR lowering が allocation-returning Copy str temporary の statement lifetime を表現していなかったことが原因だった。HIR block line ごとに新規 top-level op の temporary output を確認し、Copy だが state-only owner scoping が必要な str temporary へ line-end EndScope を挿入する。非 dropped line result は EndScope.result で保存するため、関数返却値や block result を誤って消費しない。これにより stdio/ANSI false positive は解消し、resource.owner.maybe_leak 自体は弱めていない。examples の残り 1 件は cliarg_count / cliarg_get の raw argv scratch owner flow であり、ISS-20260512T041752474Z-RESOURCE-OWNER-SUMMARY-REPORTS-CLIAR-97FEDA3D として分離した。

Stage 5: effect model の拡張

目的: raw memory を safe surface から閉じつつ、stdlib 内部の正当な allocation を表現する。

作業:

  • internal effect と surface fold を導入する。
  • raw memory primitive は compiler-owned boundary では InternalAlloc / UnsafeMemory として扱う。
  • public pure API から raw identity が漏れた場合は fold 不可として resource.raw.* / effect.* の diagnostic にする。
  • user source から raw address escape を構成できる経路を compile_fail にする。
  • raw identity escape と ordinary impure call を同じ表示 bucket に依存させず、compiler diagnostic 再設計計画resource.raw.* / effect.* code へ分ける。

commit 単位:

  1. effect enum / fold 関数。
  2. raw primitive effect 分類。
  3. stdlib internal boundary の暫定許可。
  4. public escape diagnostics。

進捗:

  • 2026-05-06: compiler-owned raw-memory-boundary capability は SourceCapabilities と SourceMap を通して Resource IR effect gate に届く。UnsafeMemoryInPureFunction は raw-memory-boundary でない source では effect.pure.calls_impure として error 化済みである。
  • 2026-05-06: ISS-20260506T122605377Z-STDLIB-ALLOC-STRING-RAW-MEMORY-BOUND-7853986C として、configured stdlib の alloc/string.neplalloc/string/storage.neplcore/mem.nepl と同じ exact raw-memory-boundary capability の対象に加えた。これは string / str owned storage helper の内部 raw load / store / bulk_copy を Stage 6 移行中に許可するもので、stdlib 全体や arbitrary suffix path を許可するものではない。Loader は configured stdlib_root から canonical path を計算し、該当する exact path だけを許可する。
  • 2026-05-06: wasm doctest で、alloc/io.nepl / alloc/string/utf8.nepl / std/text.nepl / std/streamio/scanner/state.nepl にも同種の raw-memory-backed boundary 未整理が残ることを確認し、ISS-20260506T123740149Z-STDLIB-RAW-MEMORY-BACKED-SCANNER-AND-338A3B52 として分離した。これらは安易に stdlib 全体を許可せず、true internal boundary と safe public wrapper の責務を確認してから exact capability か Stage 6 API 移行で解く。
  • 2026-05-06: ISS-20260506T123740149Z-STDLIB-RAW-MEMORY-BACKED-SCANNER-AND-338A3B52 として、alloc/io.nepl / alloc/string/utf8.nepl / std/text.nepl / std/streamio/scanner/state.nepl を configured exact boundary table に追加した。tests/stdlib/kp.n.md から effect.pure.calls_impure は消え、残りは fs/stdio read owner summary、pref dynamic range summary、f64/f32 runtime timeout として分離された。
  • 2026-05-06: remote main の string responsibility split 後、alloc/string/access.nepllen / string_byte_at_uncheckedalloc/string/scanner.nepl の scanner byte helper が exact raw-memory-boundary capability に追従しておらず、effect.pure.calls_impure が再発した。ISS-20260506T135746003Z-STRING-ACCESS-SPLIT-LOSES-RAW-MEMORY-8C64A912 として、両 module を configured stdlib の exact boundary table に追加した。Stage 6 移行完了までの internal string layout boundary は、module split ごとに loader capability table と regression を同時更新する。
  • 2026-05-06: remote main の integer conversion split 後、alloc/string/integer.neplfrom_u128_radix が raw store_u8 で文字列 buffer を構築するにもかかわらず exact raw-memory-boundary capability に追従していなかった。ISS-20260506T150445017Z-STRING-INTEGER-SPLIT-LOSES-RAW-MEMOR-36A59D71 として alloc/string/integer.nepl を loader の exact boundary table に追加した。併せて alloc/string/float.nepl は直接 raw memory 操作を持たず StringBuilder / integer conversion へ委譲していることを確認し、過剰な raw boundary capability は付与しない。
  • 2026-05-06: KP doctest の次 blocker として、alloc/string/builder.neplsb_append_result / sb_append_byte_result / sb_build_result が raw store_u8 / mem_copy を使うにもかかわらず exact raw-memory-boundary capability に追従していないことを確認した。ISS-20260506T152038161Z-STRING-BUILDER-SPLIT-LOSES-RAW-MEMOR-637613A4 として alloc/string/builder.nepl を loader の exact boundary table に追加した。StringBuilder は owned byte buffer の内部構築境界であり、Stage 6 の owner-token API 移行が完了するまでは safe public surface ではなく compiler-owned internal boundary として扱う。
  • 残件は、raw-memory-backed stdlib public API を Stage 6 で internal/public 境界へ分け、raw identity と owner token が safe surface へ漏れない最終 API に移行することである。
  • 2026-05-13: ISS-20260427T132406497Z-CORE-MEM-RAW-MEMORY-OPERATIONS-BYPAS-DC67DF04 を core compiler 側では verified / resolved とした。UnsafeMemoryInPureFunction hard gate、Resource IR raw identity / cell / owner gate、exact raw-memory-boundary capability regression が揃っており、user source から raw memory operation を pure bypass する元の問題は閉じている。Stage 6 の stdlib internal/public API 移行は引き続き stdlib issue 側で追跡する。
  • 2026-05-13: ISS-20260513T023254911Z-CORE-MEM-FACADE-STILL-CARRIED-RAW-ME-FEEF633F を解決した。core/mem.nepl root は public facade に縮小し、types / raw / allocator / pointer submodule へ実装責務を分離した。loader の exact raw-memory-boundary capability も root facade から外し、実装 submodule のみに付与する。raw helper の public re-export 閉鎖は未完だが、Stage 6 の前提である「public facade 自体が raw boundary privilege を持たない」状態に進めた。
  • 2026-05-13: ISS-20260427T152954558Z-CORE-MEM-EXPOSES-RAW-ADDRESS-ESCAPE--4185EA5D を解決した。core/mem root facade は types / layout / checked pointer API だけを公開し、mem_ptr_wrap / mem_ptr_addr / region_new / raw allocator / raw load-store は internal/raw implementation module へ閉じた。compiler resolver も private import を public facade 越しに推移公開しないため、#import "core/mem" as * から raw address escape を構成できない。残る Stage 6 の焦点は、direct internal/raw module の利用 discipline、Vec/StringBuilder/collection/self-host buffer の owner token API 移行、stdlib 全体の raw-memory-backed public API 整理である。
  • 2026-05-13: ISS-20260427T204839136Z-STDLIB-RAW-MEMORY-BACKED-APIS-REQUIR-E503CD84 の一部として、loader の raw-memory-boundary authority を exact module allowlist から source capability proof へ移した。RAW_MEMORY_BOUNDARY_STDLIB_PATHS は削除し、configured stdlib root 配下の compiler-owned source で、AST 上に raw body instruction / raw address helper / raw owner helper / raw helper call / raw intrinsic / restricted constructor の証拠がある場合だけ capability を付与する。これにより module 分割のたびに compiler allowlist を追従する設計を廃止し、user source や prefix-like path は raw 証拠を持っていても capability を受け取らない。
  • 2026-05-17: ISS-20260517T093306644Z-SOURCE-CAPABILITY-PROOF-COLLECTOR-DI-429F5FD2 により、source capability proof の observer callback から domain 別 collector method を直接呼ぶ構造をやめ、SourceCapabilityProofEventdispatch_source_capability_proof_event へ集約した。raw memory / owner aggregate / compiler memory field の個別証拠分類は専用 module に残すが、どの構文イベントにどの proof rule を適用するかは typed event の exhaustive match で管理する。新しい proof event を追加した場合は dispatcher match の更新が Rust の網羅性検査で必要になり、静的検査プログラム自体の配線漏れを発見しやすくする。
  • 2026-05-13: ISS-20260513T090733651Z-VEC-STORAGE-CLEANUP-DEALLOCATES-THRO-4A132C97 を解決した。vec_free_storage / push realloc failure cleanup / merge sort scratch cleanup は mem_ptr_addrMemPtr を raw i32 owner へ落とさず、typed dealloc_ptr<T> で free obligation を閉じる。確保直後 scratch buffer の dealloc failure branch は到達不能として扱い、Resource IR に owner leak branch を残さない。stdlib/alloc/collections/vec focused doctest は 32/32 passing になった。これは OwnedBuffer<T> 完成ではないが、Stage 6 の MemPtr = non-owning pointer 方針に沿って raw address 経由の owner proof loss を取り除く局所前進である。
  • 2026-05-13: ISS-20260513T092818532Z-VEC-CLEANUP-FREE-ACCEPT-NON-COPY-PAY-497499BC を解決した。Vec.clear / Vec.free / vec_free_storage は initialized element を走査せず storage-only cleanup を行うため、OwnedBuffer<T> と element drop traversal が入るまでは .T: Copy に限定する。Vec<CleanupPayload>clear / free compile-fail と source policy で、unsupported non-Copy payload が安全に破棄できるように見える退行を防ぐ。
  • 2026-05-13: ISS-20260513T095201685Z-RAW-MEMORY-SOURCE-CAPABILITY-TREATS--389248CD を解決した。raw-memory-boundary source capability scanner は、raw helper と同名の parameter / local / same-module safe helper を raw evidence として扱わない。RawMemoryBoundaryScope を分離し、function parameter、block let、match payload binding、top-level 定義による lexical shadowing を scanner に反映した。これにより source capability proof が単なる identifier spelling ではなく、shadow されていない raw operation / raw helper / restricted constructor の AST evidence に基づく。
  • 2026-05-13: ISS-20260513T214506607Z-BTREE-KEY-EQUALITY-HELPERS-ACCEPT-OR-BFADC667 を解決した。BTreeMap / BTreeSet の key equality helper は ord_lt を値渡しで 2 回呼ぶため、borrowed key comparison と OwnedBuffer<T> / initialized cell based non-Copy collection が入るまでは .K: Ord&Copy / .T: Ord&Copy に限定する。これにより sorted-array BTree API の Stage 6 Copy-only 境界を helper から迂回できない。
  • 2026-05-14: ISS-20260514T045613682Z-STREAMWRITER-STORES-RAW-MEMPTR-OWNER-448F8E4F を解決した。StreamWriter は direct MemPtr<u8> / capacity / pending length field を保持せず、ByteBuilder を owner boundary として保持する形へ移行した。flush は ByteBuilder.ptr の non-owning view を使い、close は ByteBuilder owner を move して解放する。これにより stream writer public state から raw pointer owner field が消え、Stage 6 の transitional MemPtr owner field policy は 8 件から 7 件へ減った。
  • 2026-05-14: ISS-20260514T051405052Z-STREAMSCANNER-HIDES-BUFFER-OWNER-BEH-0977B2E3 を解決した。StreamScanner は raw MemPtr<u8> header に buffer pointer / length / cursor position を詰める設計を廃止し、input owner を ByteBuf field、cursor position を typed Vec<i32> storage として保持する。scanner byte access と token slice construction は state helper に集約し、cursor mutation は vec::get / vec::replace 経由で Resource IR が typed initialized cell として追跡できる形にした。これにより StreamScanner.header の transitional exception を削除し、Stage 6 の MemPtr owner field policy は 7 件から 6 件へ減った。
  • 2026-05-14: ISS-20260514T055830236Z-VECDATALEN-CARRIES-RAW-VEC-STORAGE-V-B662D7DF を解決した。VecDataLen<T>Vec.data: MemPtr<T>len を public struct field としてまとめる raw storage view carrier だったため、Copy-only 制約を維持しても MemPtr owner-like field migration の例外を増やしていた。互換 alias は残さず VecDataLen / data_len を削除し、呼び出し側は len<T>(&Vec<T>)data_mem_ptr<T>(&Vec<T>) を明示的に別観測する形へ移した。これにより Stage 6 の MemPtr owner field policy は 6 件から 5 件へ減った。
  • 2026-05-14: ISS-20260514T063755030Z-STRINGBUILDER-DUPLICATES-BYTEBUILDER-F90DFA2F を解決した。StringBuilderOption<MemPtr<u8>> / len / capByteBuilder と重複して保持していたため、text builder 固有の raw owner field 例外を残していた。StringBuilderByteBuilder owner を保持する typed wrapper に変更し、capacity / append / free / build は ByteBuilder / ByteBuf の owner boundary へ委譲する。safe buffer API は pure surface に揃え、raw memory effect は各 raw-memory-boundary source 内の Resource IR / source capability gate で検査する形にした。これにより Stage 6 の MemPtr owner field policy は 5 件から 4 件へ減った。
  • 2026-05-14: ISS-20260514T071955576Z-BYTEBUF-STORES-OWNED-BYTES-AS-OPTION-FA165159 を解決した。ByteBuf / ByteBuilderOption<MemPtr<u8>> を owned storage field として持つ過渡設計をやめ、free obligation owner を RegionToken<u8> field に集約した。MemPtr<u8>io_bytebuf_data_ptr_ref / byte_builder_data_ptr_ref が参照から返す non-owning projection に限定し、append / flush / write / UTF-8 変換は owner を動かさず view を使う。2026-05-18 には ByteBufByteBufStorage::Empty | Owned(RegionToken<u8>) へ進め、空 storage の zero-size RegionToken sentinel を削除した。compiler ResourceIR 側も function summary の raw owner alias 伝播で non-owning projection 由来の mem_ptr_add を owner alias と誤認しないよう、raw view state を summary traversal に接続した。これにより Stage 6 の MemPtr owner field policy は 4 件から 2 件へ減った。
  • 2026-05-14: ISS-20260514T085248522Z-VEC-STORES-BACKING-STORAGE-AS-MEMPTR-FFC9775A を解決した。Vec<T>data: MemPtr<T> を storage owner field として持つ過渡設計をやめ、region: RegionToken<T> を free obligation owner として保持する。data_mem_ptr<T> / vec_storage_mem_ptr<T> / sort・map・filter・prefix・mutation 系は参照から得る non-owning MemPtr<T> view を使い、戻り値では RegionToken<T> owner を移す。これにより Stage 6 の MemPtr owner field policy は RegionToken.ptr だけの 1 件へ減った。ただし RegionToken はまだ forgeable であり、OwnedBuffer<T> / initialized prefix / non-Copy payload drop traversal は Stage D の残件として継続する。
  • 2026-05-14: ISS-20260514T093715629Z-BYTEBUILDER-GROW-CLEANUP-STILL-USES--DC675F3E を解決した。当時の byte_builder_realloc_region_or_free は grow failure cleanup で RegionToken<u8> を ptr/size に分解して dealloc_ptr へ渡すのをやめ、dealloc_region<u8> region へ owner tokenを丸ごと渡した。Err branch は typed OutOfMemory に畳み、通常 stdlib 実装の unreachable を排除した。その後の 2026-05-20 の ByteBuilder fallible owner payload 修正で、現在は失敗時に旧 owner を返す byte_builder_realloc_region_or_keep に進めている。
  • 2026-05-15: ISS-20260514T160255919Z-VEC-DATA-PTR-EXPOSES-RAW-I32-STORAGE-546EA2EB を解決した。Vec.data_ptr<T>(&Vec<T>) -> i32 は raw address observer として public API に残さず削除した。必要箇所は data_mem_ptr<T>(&Vec<T>) -> MemPtr<T> を明示的に観測し、raw-memory-boundary 実装箇所だけが mem_ptr_addr へ変換する。同じ根として、この時点では kpsearch の raw i32 pointer helper を private にし、公開面を Vec<i32> wrapper に揃えた。後続の ISS-20260514T203142216Z-KPSEARCH-STILL-IMPLEMENTS-PUBLIC-VEC-0D1AFA1Dkpsearch 自体の raw storage view 依存も削除済みである。
  • 2026-05-15: ISS-20260514T220733927Z-ALLOC-STRING-ROOT-RE-EXPORTS-RAW-STR-BF0F0254 を解決した。alloc/string root は通常利用者向け safe facade に戻し、alloc/string/storagealloc/string/utf8 の raw MemPtr helper を public wildcard re-export しない。std/fs / std/stdio / std/env/cliarg / std/streamio など raw OS/storage boundary 側だけが explicit raw helper module を import する。これにより core/mem / Vec と同じ public/raw facade split が string でも揃った。
  • 2026-05-15: ISS-20260514T161819706Z-VEC-STORAGE-MEMPTR-HELPER-EXPOSES-LO-A9C5BC02 を解決した。vec_storage_mem_ptr<T>(VecStorageState, &RegionToken<T>) -> MemPtr<T> は lower-level storage state pieces を受ける公開 helper だったため削除した。data_mem_ptr<T>(&Vec<T>)VecStorageState を直接 match し、Empty は 0 address view、Ownedregion_ptr 由来 view を返す。public surface は &Vec<T> observer に集約した。

Stage 6: stdlib memory API の段階移行

目的: compiler の Resource IR と stdlib の公開 API を同期する。

作業:

  • core/mem を internal raw module と safe public wrapper に分ける。
  • collection は Copy read、borrowed read、owned remove/pop、container drop を API と型制約で分ける。
  • dealloc_* は storage-only dealloc と initialized payload destruction を分ける。
  • self-host compiler の buffer / diagnostic / outcome は raw MemPtr を直接持たず、safe wrapper を使う。

commit 単位:

  1. core/mem internal/public 境界。
  2. Vec / StringBuilder の owner token 移行。
  3. collection drop contract。
  4. self-host buffer API 移行。

進捗:

  • 2026-05-15: ISS-20260514T164856024Z-OWNER-BACKED-AGGREGATE-CONSTRUCTORS--61400B84 を解決した。compiler typecheck は struct field 型を走査し、direct field に compiler owner token を含む public aggregate を OwnerBackedAggregateBoundaryOnly として分類する。Vec<T> などの特定名 allowlist ではなく、RegionToken<T> の restricted constructor policy と型形状から導出する。
  • 同修正で、owner-backed aggregate の direct constructor は OwnerAggregateConstructorBoundary source capability を持つ compiler-owned stdlib 実装 source に限定した。configured stdlib 配下でも無条件には付与せず、parsed source に aggregate constructor evidence がある場合だけ capability を付ける。user source では evidence があっても capability は付与せず、type.owner_aggregate.constructor_restricted を出す。
  • 2026-05-15: ISS-20260514T230404748Z-OWNER-BACKED-AGGREGATE-POLICY-DOES-N-7D995A6B を解決した。owner-backed aggregate 判定は direct RegionToken<T> field だけでなく、Vec<T> を field に持つ wrapper、HashMapStorage<K,V>HashMap<K,V,H> のように owner-backed aggregate を入れ子に含む型へ fixed-point で伝播する。これにより user source が collection storage state を通常 struct constructor で再構築する経路も type.owner_aggregate.constructor_restricted で拒否される。判定は stdlib 名 allowlist ではなく、compiler owner token policy と struct field 型から導出する。
  • owner token field projection も field 型を解決した上で boundary 外では type.owner_token.field_access_restricted とするため、aggregate を経由して free obligation owner を forge / extract する経路を閉じた。こちらは OwnerAggregateFieldBoundary source capability へ分離され、RawMemoryBoundary とも分離している。stdlib 実装 module が Vec / ByteBuilder などの owner aggregate を移動・再構築できても、raw memory operation authority までは広がらない。
  • 2026-05-15: ISS-20260514T183506445Z-STD-ENV-CLIARG-ROOT-MIXES-RAW-ARGV-B-C76C9E1E を解決した。std/env/cliarg root facade は core/mem/raw / core/mem/internal を直接 import せず、cliarg_count / cliarg_get は qualified std/env/cliarg/raw helper へ委譲する。argv scratch allocation、raw address conversion、out pointer 初期化、args_get、raw slot load は cliarg_count_result / cliarg_get_checked に集約し、C string helper は std/env/cliarg/cstr を明示 import する境界へ分けた。
  • 2026-05-15: ISS-20260514T190700987Z-SELF-HOST-CLI-ARGS-PARSER-READS-VEC--5193AE7F を解決した。stdlib/neplg2/cli/args/parse.neplcore/mem / core/mem/raw を import せず、selfhost_cli_arg_at / selfhost_cli_parse_loop は borrowed Vec<str>v::get<str> / v::len<str> だけで CLI token を観測する。parser caller 側の Vec<str> owner obligation は doctest 側で明示的に解放し、Resource IR regression で Vec.get<str> が Copy read として owner storage を移動しないことを固定した。focused parser suite の合計 compile time 問題は ISS-20260514T193353066Z-SELFHOST-CLI-ARG-PARSER-DOCTEST-SUIT-CF8C1BA8 に分離した。
  • 2026-05-15: ISS-20260514T195643983Z-KPPREFIX-EXPOSES-COPYABLE-RAW-PREFIX-416FBAB5 を解決した。kp/kpprefixPrefixI32 を raw i32 pointer / len の Copy handle として公開するのをやめ、data <Vec<i32>> の owner handle に変更した。prefix_build_i32 / prefix_range_sum_i32 の public raw address API は互換 alias を残さず削除し、公開面は prefix_build_vec_i32(Vec<i32>) -> Result<PrefixI32, Diag>prefix_sum_i32(&PrefixI32, i32, i32) -> Result<i32, Diag> に揃えた。内部も vec::filled / vec::get / vec::replace / vec::free だけを使うため、KP prefix helper は raw-memory-boundary module ではなく typed Vec owner boundary の利用者になった。
  • 2026-05-15: ISS-20260514T200755109Z-KPFENWICK-AND-KPDSU-EXPOSE-RAW-I32-O-953345F8 を解決した。kp/kpfenwick は raw allocation handle を public i32 として返す API をやめ、Fenwick owner、FenwickAddError、borrowed query Result に揃えた。kp/kpdsu も raw parent/size handle を廃止し、DisjointSet owner と DisjointSetUpdateError を使う API に移した。どちらも ordinary caller が raw storage identity を保持しないため、owner/free obligation が public 型に残る。
  • 2026-05-15: ISS-20260514T202200590Z-KPGRAPH-EXPOSES-DENSE-MATRIX-RAW-I32-F15E55CB を解決した。kp/kpgraphDenseGraph.mat <i32>dense_graph_bfs_dist_raw(n, mat, start) を削除し、DenseGraphAdjacencyMatrix owner wrapper にした。構築・読み込み・BFS は Result で失敗を返し、BFS の距離配列と queue も Vec<i32> API だけで扱う。doctest も returned Vec の raw storage を読まず、v::get<i32> で stdout を出す。
  • 2026-05-15: ISS-20260514T203142216Z-KPSEARCH-STILL-IMPLEMENTS-PUBLIC-VEC-0D1AFA1D を解決した。kp/kpsearch は raw memory import、mem_ptr_addr data_mem_ptr、raw i32 helper を削除し、query API を &Vec<i32> borrowed read に変更した。二分探索は Vec.len / Vec.get だけで実装し、unique_sorted_vec_i32 は owner-consuming のまま Vec.get / Vec.replace で in-place compaction する。
  • 2026-05-15: ISS-20260514T204735670Z-VEC-SORT-FACADE-RE-EXPORTS-RAW-MEMPT-6646B4EF を解決した。canonical alloc/collections/vec/sort facade は raw MemPtr helper と sort_i32 raw slice adapter を再公開せず、ordinary caller には safe Vec sort API と sort_is_sorted observer だけを見せる。その後 ISS-20260519T130927391Z-VEC-SORT-RAW-HELPERS-ARE-DIRECTLY-CA-BE6B177C で explicit sort/raw/* import 自体も ordinary source の bypass になることを確認し、sort の raw traversal は direct-importable helper module ではなく各検査済み sort implementation file 内の private boundary に閉じる方針へ更新した。
  • 2026-05-15: ISS-20260514T211956079Z-OWNER-AGGREGATE-BOUNDARY-TREATS-QUAL-8D858CD3 を解決した。compiler の OwnerAggregateBoundary source capability 判定は、Result::Ok / Option::Some のような qualified enum variant を owner aggregate constructor evidence として扱わないようにした。constructor evidence は unqualified constructor-like symbol に限定し、field accessor evidence は explicit helper として維持する。これにより、ordinary enum construction が owner-backed aggregate constructor / owner-token field projection の capability を過大付与する経路を閉じた。
  • 2026-05-15: ISS-20260514T212804383Z-OWNER-AGGREGATE-CONSTRUCTOR-AND-OWNE-58143AB3 を解決した。OwnerAggregateBoundaryOwnerAggregateConstructorBoundaryOwnerAggregateFieldBoundary に分離し、source evidence と許可操作の対応を細かくした。constructor evidence だけでは owner token field projection を許可せず、field accessor evidence だけでは owner-backed aggregate direct constructor を許可しない。
  • 2026-05-15: ISS-20260515T020307026Z-OWNER-AGGREGATE-CONSTRUCTOR-CAPABILI-91ECE78D を解決した。OwnerAggregateConstructorBoundary は file-wide な bool ではなく constructor 名付き capability とし、loader は Vec evidence なら Vec だけ、Diag evidence なら Diag だけを記録する。typecheck の owner-backed aggregate constructor gate も実際に適用中の constructor 名を照合するため、同じ compiler-owned stdlib source に unrelated constructor evidence があっても Vec / HashMap / owner wrapper の direct constructor までは許可されない。
  • 2026-05-15: ISS-20260515T023829013Z-CHECKED-OWNER-HELPERS-GRANT-RAW-MEMO-EC25363F を解決した。alloc_ptr / alloc_region / dealloc_region などの checked owner wrapper は safe public API であり、これを使うだけでは raw-memory-boundary source evidence としない。raw authority は actual raw operation、raw address identity helper、restricted compiler memory constructor、raw address intrinsic に限定する。
  • 2026-05-15: ISS-20260515T024851827Z-RAW-MEMORY-OPERATIONS-SHARE-A-FILE-W-2A06192D を解決した。raw memory source capability は RawMemoryStructuralBoundaryRawMemoryOperationBoundary(RawMemoryOp)RawBodyMemoryOperationBoundary(RawBodyMemoryOp) に分かれた。当時は raw address identity helper / MemPtr / RegionToken constructor を structural capability として扱ったが、後続の ISS-20260516T100329630Z-RAW-ADDRESS-VIEW-SOURCE-PROOF-GRANTS-A2AEFF8E で raw address view は RawAddressViewBoundary へさらに分離した。load / store / alloc などの actual raw helper や intrinsic は operation enum で記録する。#wasm / #llvm body の memory instruction も backend operation enum で記録し、typecheck と ResourceEffectBoundary diagnostic suppression は使用中の operation と capability を照合する。これにより、同じ compiler-owned stdlib source 内でも load evidence が store を許可したり、address-view evidence が raw load/store suppression を広げたりしない。
  • 2026-05-15: ISS-20260515T110646911Z-CHECKED-MEMPTR-PROOF-DROPS-REGIONTOK-B846CF4C を解決した。public raw escape diagnostic と internal raw identity summary の filter を分離し、str のような opaque high-level owner は summary から隠したまま、RegionToken の allocator-derived owner provenance は RawIdentityReturnSummary に残す。これにより alloc_region -> Result::Ok(RegionToken)region_ptr_at -> Result::Ok(MemPtr)、callback-returned MemPtr の経路を checked store / load / fill が Resource IR 上で証明できる。公開面では RegionToken は引き続き owner-protected なので raw address escape diagnostic は出ない。
  • 2026-05-18: ISS-20260518T060850538Z-CHECKED-MEMPTR-PROVENANCE-REJECTS-RE-CA3CAB00 を解決した。owner-carrier metadata 過展開を抑える後続整理で、RegionToken そのものまで internal summary barrier として扱われ、alloc_region -> Result::Ok(RegionToken) -> region_ptr -> store_i32 の checked provenance が再び落ちていた。修正後は raw_identity_type_blocks_internal_summarystr と structural owner carrier aggregate だけを遮断し、direct compiler owner token と Result<RegionToken,E> payload は internal provenance summary の対象に残す。これにより builder / collection aggregate の raw identity 過展開は戻さず、checked MemPtr proof に必要な owner-token raw field 証跡だけを回復した。
  • 2026-05-15: ISS-20260515T153348188Z-PUBLIC-MEM-PTR-ADD-BYPASSES-REGION-B-F82F9BBB を解決した。mem_ptr_addRegionToken 由来の MemPtr から任意 offset の MemPtr を作れるため、safe caller が region_ptr_at の bounds / alignment 証明を迂回できた。Resource IR lowering は RawAddressViewKind::MemPtrOffset を導入し、一般的な raw address arithmetic である Offset と、public MemPtr を作る pointer arithmetic を enum 上で分ける。effect boundary は MemPtrOffset を raw address view boundary operation として診断し、compiler-owned raw-address-view boundary source 以外では resource.raw.memory_outside_boundary とする。RawAddressViewKind::NonOwningProjection は検査済み projection として別 enum variant のまま扱い、region_ptr_at の Ok payload や region_ptr 由来 view と混同しない。
  • 2026-05-15: ISS-20260514T215003679Z-VEC-EMPTY-CONSTRUCTOR-ACCEPTS-NON-CO-258C7574 を解決した。vec_empty<T> は allocation を行わなくても public Vec<T> owner aggregate を構築するため、現行の Copy-only collection cleanup contract では例外にせず .T: Copy に限定した。Vec<NonCopyPayload> の empty construction は type.trait_bound.unsatisfied で拒否される。
  • 2026-05-15: ISS-20260514T223113919Z-STD-TEXT-ROOT-RE-EXPORTS-RAW-UTF-8-M-7F3A2723 を解決した。std/text root は checked ByteBuf -> str conversion だけを再公開し、raw MemPtr<u8> based validation / decode helper は std/text/validate / std/text/decode の explicit import 境界へ閉じた。invalid UTF-8 doctest fixture も raw address store をやめ、checked MemPtr store と owner cleanup で構成する。
  • 2026-05-16: ISS-20260515T155626605Z-REGIONTOKEN-STILL-STORES-MEMPTR-AS-O-C0F9E4D1 を解決した。RegionToken<T>ptr: MemPtr<T> を持たず、raw: i32, size: i32 の owner token layout になった。MemPtr<T>region_ptr<T>(&RegionToken<T>)region_ptr_at<T,U> が返す non-owning projection に限定し、Resource IR lowering / initialized summary / raw-address return summary は direct RegionToken.raw を owner identity として扱う。owner summary seed は dealloc_region -> dealloc_ptr のような callee summary 経由の raw owner consumption も見るため、direct raw field 化しても free obligation consumption が関数境界で失われない。Stage 6 の MemPtr owner-like field policy は transitional allowlist 0 件になった。
  • 2026-05-16: ISS-20260515T173402735Z-STDIO-READ-BYTES-STILL-USES-MEMPTR-O-571DB719 を解決した。std/stdio/read の read_all / read_line は main buffer と fd_read scratch を direct alloc_ptr / dealloc_ptr / realloc_ptr で扱わず、RegionToken<u8> owner と region_ptr non-owning view に分離した。stdio_finish_read_buffer / stdio_discard_read_bufferRegionToken<u8> owner を消費する helper へ変更し、cleanup branch から unsafe unreachable を削除した。read/text doctest は ByteBuf-to-str 側の string_from_mem_unchecked_result owner transfer 残件で止まるため、ISS-20260515T174246376Z-READ-TEXT-DOCTESTS-EXPOSE-STRING-FRO-F2CEA535 に分離した。
  • 2026-05-16: ISS-20260515T163252091Z-PUBLIC-ALLOC-PTR-APIS-STILL-ENCODE-F-EECDD686 を解決した。stdlib/core/mem/pointer/alloc.nepl を削除し、alloc_ptr / realloc_ptr / dealloc_ptr が public / direct import 可能な MemPtr<T> owner API として残る経路を閉じた。alloc_region_bytes / realloc_region_bytes_keepRegionToken<T> owner と direct RegionToken.raw / RegionToken.size field に基づく owner-consuming boundary へ揃え、MemPtr<T> は non-owning view としてだけ扱う。Resource IR には OwnerStorageExtent::RegionTokenSize と projection owner return への consumed extent requirement 適用を追加し、region_new summary 経由でも raw owner extent と token size の対応を証明する。
  • 2026-05-20: ISS-20260520T074855359Z-REGION-NEW-ACCEPTS-NON-OWNING-MEMPTR-10E3BBC9 を解決した。region_new<T>MemPtr<T> を受け取らず、allocator / realloc が返した raw owner identity と size を受け取る internal boundary にした。Resource IR dedicated lowering も RegionToken.raw を第一引数の raw place に alias し、borrowed region_ptr / region_ptr_at / str_addr 由来の raw view は owner extent proof と non-owning view propagation で引き続き拒否する。owner summary は returned raw owner leaf だけを seed し、RegionToken.size のような metadata i32 を owner と誤認しないため、extent mismatch は ConstructInput で検出される。
  • 2026-05-16: ISS-20260515T223330574Z-VEC-STORAGE-TAG-AND-REGIONTOKEN-OWNE-DDDAD134 を解決した。VecStorageState と split region: RegionToken<T> field を廃止し、VecStorage<T>::Empty | Owned(RegionToken<T>) へ移行した。Vec<T>len/cap/storage の 3 field になり、free obligation owner は Owned variant payload にだけ存在する。vec_free_storage<T> は owner-carrying enum を消費し、Empty branch の no-op と Owned branch の dealloc_region を source type と match の網羅性で証明する。これを実用化するため、borrowed enum match は &VecStorage<T> payload を &RegionToken<T> として束縛し、match typecheck は期待型に引きずられて borrowed scrutinee を owned enum と誤推論しないよう retry / rollback を持つ。owner-backed aggregate field gate は field type 基準へ絞り、metadata projection は許可しつつ owner field extraction は拒否する。
  • 2026-05-16: ISS-20260516T010329239Z-RESOURCE-PROOF-PRIMITIVE-CLASSIFICAT-12B44B46 を解決した。compiler memory type と memory helper primitive の分類を resource_primitives registry に集約し、MemPtr / RegionToken / region_* / mem_ptr_* の Resource IR / source capability direct string 判定を registry query へ置換した。これは stdlib module ごとの allowlist ではなく、型解決済みの compiler memory type と helper primitive enum を通す proof boundary である。今後 OwnedBuffer / OwnedRegion などを追加する場合も registry の enum / query へ追加し、個別 module ごとの証明器を増やさない。
  • 2026-05-16: ISS-20260516T034018225Z-SOURCE-CAPABILITY-EVIDENCE-USES-PER--87E68F2E を解決した。source_capability/walk.rs の共通 traversal に加え、SourceCapabilityProof を単一 typed proof value として導入し、raw memory evidence、owner aggregate evidence、compiler memory type evidence を module_source_capabilities で一括して SourceCapabilities へ変換する。loader.rs は capability domain ごとの collector API を呼ばず、configured stdlib source について unified proof だけを消費する。raw memory / owner aggregate module は traversal owner ではなく evidence classifier / context provider へ縮小した。これにより source capability は個別 module ごとの証明器や stdlib allowlist ではなく、source AST を一度走査する compiler-owned proof に統合される。
  • 2026-05-16: ISS-20260516T035713850Z-SOURCE-CAPABILITY-COMPILER-MEMORY-TY-47DC1113 を解決した。直前の unified proof 導入後も compiler memory type definition evidence だけは module_compiler_memory_type_definitions による module 再走査で proof に挿入されていたため、SourceCapabilityObserver::observe_struct_definition を追加し、SourceCapabilityProofCollectorStructDef evidence を同じ traversal から受け取るようにした。memory_type_definition.rs は module walker ではなく StructDef -> CompilerMemoryType の typed classifier に縮小したため、SourceCapabilities の全 domain は shared source proof lifecycle で集まる。
  • 2026-05-16: ISS-20260516T073151046Z-SOURCE-CAPABILITY-RAW-HELPER-BODY-EV-43BC8055 を解決した。SourceCapabilityProofCollector の raw helper definition evidence は、関数名が alloc_raw / load_i32 などの raw helper 名であり、かつその関数自身の body に raw evidence がある場合だけ operation capability を付けるべきだったが、修正前は nested function の evidence まで全 active function frame へ書き込んでいた。修正後は現在 walk 中の function frame だけに body evidence を記録し、module-level operation evidence は従来どおり正確な operation enum として残す。これにより nested helper を持つ compiler-owned source でも、外側関数名への過大な raw operation capability 付与を防ぐ。
  • 2026-05-16: ISS-20260516T100329630Z-RAW-ADDRESS-VIEW-SOURCE-PROOF-GRANTS-A2AEFF8E を解決した。source capability は RawMemoryStructuralBoundaryRawAddressViewBoundary を分離し、MemPtr / RegionToken direct constructor や restricted field access は representation boundary、mem_ptr_addr / region_ptr / str_addr などの raw address view helper は address-view boundary だけを証明する。MemoryHelperPrimitive::is_raw_address_view_boundary_evidence は exhaustive match として保持し、RegionNew のような owner-token helper call は address-view evidence から除外する。さらに raw helper definition self-operation evidence は function_has_raw_operation_evidence として actual raw operation / raw body evidence だけで更新するため、address-view helper を呼ぶ load_i32 という名前の関数が raw load operation capability を得る経路も閉じた。ResourceEffectBoundary の RawAddressViewOutsideBoundary suppression は raw_address_view_boundary_allowed だけを見る。これにより address-view 利用証拠が compiler memory representation constructor/field authority へ昇格しない。

Stage 7: 旧 summary の削除

目的: 複雑化の原因になっていた HIR 個別 summary を取り除く。

作業:

  • raw alias / enum payload alias / aggregate field alias / function value raw effect summary を Resource IR summary へ統合する。
  • move_check.rs の旧 state map を削除する。
  • drop_insertion を Resource IR drop elaboration へ統合する。

commit 単位:

  1. old summary read path の停止。
  2. old summary 型の削除。
  3. old move_check / drop_insertion の統合削除。

Issue 整理方針

issue位置づけ完了条件
RV-CORE-002Stage 1 の親 issue。module 境界と責務分離を追跡する。typecheck.rs / move_check.rs の主要責務が module 化され、focused regression が維持される。
RV-CORE-009Stage 2-4 の親 issue。Resource IR と resource check を追跡する。Resource IR 上で move/borrow/lifetime/drop obligation を検査し、旧 checker 依存を除去する。
CORE-MEM-RAW-MEMORY-OPERATIONS-BYPASStage 5 の compiler-core issue。raw memory effect / ownership boundary を追跡した。2026-05-13 に core 側は verified / resolved。stdlib public API migration は Stage 6 の stdlib issue へ分離する。
MEMPTR-AND-REGIONTOKENStage 3/4 の compiler-core issue。MemPtr / owner token / initialized cell の compiler 側分離を追跡した。2026-05-13 に core 側は fixed / resolved。stdlib public API と collection/string/self-host buffer の移行は Stage 6 の stdlib issue へ分離する。
COPY-IMPL-CAN-MARK-COMPILER-OWNERStage 4 の compiler-core issue。owner token の線形性を trait capability layer で崩せる経路を追跡した。2026-05-14 に fixed。StructConstructorPolicy::RawMemoryBoundaryOnly(OwnerToken) に基づき compiler owner token への Copy impl を拒否する。
OWNER-BACKED-AGGREGATE-CONSTRUCTORSStage 6 の compiler-core issue。owner token を direct field に持つ aggregate の forge / projection 経路を追跡した。2026-05-15 に fixed。型形状から owner-backed aggregate を分類し、constructor と owner-token field projection を owner aggregate boundary へ限定する。
OWNER-BACKED-AGGREGATE-POLICY-DOES-NStage 6 の compiler-core issue。owner-backed aggregate policy が nested owner field に伝播しない問題を追跡した。2026-05-15 に fixed。fixed-point 構造判定で Vec wrapper、HashMapStorage、HashMap など二段目以降の owner-backed aggregate constructor も boundary 外で拒否する。
OWNER-BACKED-AGGREGATE-FIELD-PROJECTStage 6 の compiler-core issue。constructor 側で閉じた owner-backed aggregate を field projection から取り出せる問題を追跡した。2026-05-15 に fixed。field access も同じ構造判定を使い、HashMap.storageVec wrapper field の projection を owner aggregate field boundary 外で拒否する。
GENERIC-OWNER-BACKED-AGGREGATE-CONSTStage 6 の compiler-core issue。generic type application 後に owner-backed になる aggregate constructor を追跡した。2026-05-15 に fixed。constructor result の applied type を同じ構造判定へ通し、OwnerBox<Vec<i32>> のような generic wrapper constructor も boundary 外で拒否する。
OWNER-AGGREGATE-BOUNDARY-TREATS-QUALStage 6 の compiler source capability issue。qualified enum variant を owner aggregate constructor evidence と誤分類していた。2026-05-15 に fixed。constructor evidence は unqualified symbol に限定し、Result::Ok / Option::Some だけでは owner aggregate constructor capability を付与しない。
OWNER-AGGREGATE-CONSTRUCTOR-AND-OWNEStage 6 の compiler source capability issue。constructor と owner field projection が 1 capability を共有していた。2026-05-15 に fixed。OwnerAggregateConstructorBoundaryOwnerAggregateFieldBoundary へ分離し、evidence kind と許可操作を対応させる。
OWNER-AGGREGATE-CONSTRUCTOR-CAPABILIStage 6 の compiler source capability issue。constructor evidence が file-wide で別 constructor へ過大適用されていた。2026-05-15 に fixed。OwnerAggregateConstructorBoundary(String) として constructor 名ごとに記録し、typecheck は適用中の constructor 名と照合する。
CHECKED-OWNER-HELPERS-GRANT-RAW-MEMOStage 6 の compiler source capability issue。checked owner wrapper 呼び出しだけで raw boundary authority が付与されていた。2026-05-15 に fixed。alloc_ptr / alloc_region / dealloc_region など safe wrapper は raw evidence から外し、actual raw operation / raw address view helper / restricted constructor を evidence とする。
RAW-MEMORY-OPERATIONS-SHARE-A-FILE-WStage 6 の compiler source capability issue。raw operation と raw body instruction が file-wide raw boundary に畳まれていた。2026-05-15 に fixed。raw structural boundary、RawMemoryOpRawBodyMemoryOp を別 capability にし、typecheck / ResourceEffectBoundary suppression は実際の operation を照合する。raw identity escape も checked wrapper 名ではなく発生元 RawMemoryOp を保持して照合する。
CHECKED-MEMPTR-PROOF-DROPS-REGIONTOKStage 6 の Resource IR provenance issue。public escape filter と internal summary filter を共有していたため、RegionToken 返り値 provenance が checked MemPtr 証明へ届かなかった。2026-05-15 に fixed。public raw escape では RegionToken を owner-protected のまま扱い、internal RawIdentityReturnSummary には allocator-derived owner provenance を残して region_ptr / region_ptr_at / callback 経由の checked access を証明する。
PUBLIC-MEM-PTR-ADD-BYPASSES-REGION-BStage 6 の Resource IR raw address view boundary issue。public mem_ptr_addregion_ptr_at の bounds / alignment proof を迂回できた。2026-05-15 に fixed。RawAddressViewKind::MemPtrOffset を導入し、compiler-owned raw-address-view boundary source 以外では resource.raw.memory_outside_boundary として拒否する。
REGIONTOKEN-STILL-STORES-MEMPTR-AS-OStage 6 の core/mem owner-token layout issue。RegionToken<T> が最後の MemPtr<T> owner-like field を保持していた。2026-05-16 に fixed。RegionToken<T> は direct raw: i32 owner identity と size: i32 を持ち、MemPtr<T> は checked non-owning projection としてだけ構築する。Resource IR owner summary は callee summary 経由の raw owner consumption も seed し、dealloc_region の owner consumption を関数境界で証明する。
PUBLIC-ALLOC-PTR-APIS-STILL-ENCODE-FStage 6 の core/mem public API issue。alloc_ptr / realloc_ptr / dealloc_ptrMemPtr<T> を free obligation carrier として公開していた。2026-05-16 に fixed。stdlib/core/mem/pointer/alloc.nepl を削除し、safe facade と direct import の両方から public MemPtr<T> allocation owner API を撤去した。RegionToken<T> owner + MemPtr<T> non-owning projection の境界に揃えた。
VEC-STORAGE-TAG-AND-REGIONTOKEN-OWNEStage 6 の Vec owner-state issue。VecStorageStateRegionToken<T> が split field だったため、Empty と allocated token の相関を source type が証明できなかった。2026-05-16 に fixed。`VecStorage<T>::EmptyOwned(RegionToken<T>) に移行し、Vec<T>len/cap/storage だけを持つ。borrowed enum match により observer は &RegionToken<T> payload を参照でき、vec_free_storage は owner-carrying enum の match` で free obligation を閉じる。
STDIO-READ-BYTES-STILL-USES-MEMPTR-OStage 6 の stdlib scratch owner issue。std/stdio/read の read_all / read_line buffer と fd_read scratch が MemPtr<u8> owner API に依存していた。2026-05-16 に fixed。read buffer / scratch を RegionToken<u8> owner に移し、finish/discard helper は owner token を消費する。text conversion 側の string owner transfer は READ-TEXT-DOCTESTS-EXPOSE-STRING-FRO で同日に解決した。
STD-STDIO-READ-BUFFER-EXPOSES-RAW-MEStage 6 の stdlib public/raw boundary issue。std/stdio/read/buffer を direct import すると raw MemPtr<u8> iov/nread/data と caller-chosen length を受ける fd_read helper が public に見えていた。2026-05-18 に fixed。raw MemPtr helper は private に戻し、public surface は stdio_read_all_buffer_result / stdio_read_line_buffer_result に限定した。fd_read loop は local RegionToken<u8> scratch / data owner から non-owning view を導出し、read/bytesread/text は高水準 ByteBuf API へ委譲する。
READ-TEXT-DOCTESTS-EXPOSE-STRING-FROStage 6 の Resource IR / string owner transfer issue。stdio read owner 移行後も ByteBuf-to-str が string_from_mem_unchecked_result の owner leak で止まっていた。2026-05-16 に fixed。string_finishRegionToken.raw を直接取り出し、同じ raw owner に長さを書いた後で string_from_addr_unchecked へ渡すため、RegionToken owner から str owner への確定境界を Resource IR が追える。
RESOURCE-OWNER-SUMMARY-LOSES-NESTEDStage 6 の Resource IR owner summary issue。callee summary が参照する nested Result payload owner を caller 側で materialize できず、owner-preserving helper が false leak になっていた。2026-05-15 に fixed。PendingVariantOwnerEffects が helper summary の target place を基準に pending variant owner return を materialize し、stale pending consumption / return を除去する。
OWNER-AGGREGATE-FIELD-EVIDENCE-IGNORStage 6 の compiler source capability issue。get_field_ref / get_field intrinsic と same-module struct constructor evidence を source scanner が落としていた。2026-05-15 に fixed。builtin field accessor intrinsic を OwnerAggregateFieldBoundary evidence として収集し、top-level type definition を value shadow として扱わない。
CORE-MEM-EXPOSES-RAW-ADDRESS-ESCAPEStage 5/6 の stdlib public API issue。2026-05-13 に fixed。safe core/mem import から raw address escape は呼べない。direct internal/raw module と raw-memory-backed stdlib 全体の discipline は Stage 6 parent で継続する。
CORE-MEM-DEALLOC-APIS-DO-NOT-ENCODEStage 4 の compiler-core drop obligation issue。2026-05-13 に core 側は fixed / resolved。initialized payload を残した storage-only free は拒否され、collection element cleanup と raw-memory-backed public API migration は Stage 6 の stdlib issue へ分離する。
STDLIB-RAW-MEMORY-BACKED-APIS-REQUIRStage 6 の stdlib migration parent。raw-memory-backed implementation が safe public discipline を漏らさない。
VECDATALEN-CARRIES-RAW-VEC-STORAGEStage 6 の Vec raw storage view issue。2026-05-14 に fixed。VecDataLen / data_len を削除し、MemPtr owner-like field baseline を 5 件へ下げる。
STRINGBUILDER-DUPLICATES-BYTEBUILDERStage 6 の StringBuilder owner boundary issue。2026-05-14 に fixed。StringBuilder を ByteBuilder wrapper にし、MemPtr owner-like field baseline を 4 件へ下げる。
BYTEBUF-STORES-OWNED-BYTES-AS-OPTIONStage 6 の byte buffer owner boundary issue。2026-05-14 に fixed。ByteBuf / ByteBuilder を RegionToken owner boundary へ移し、MemPtr owner-like field baseline を 2 件へ下げる。
VEC-STORES-BACKING-STORAGE-AS-MEMPTRStage 6 の Vec owner boundary issue。2026-05-14 に fixed。Vec storage owner を RegionToken field へ移し、MemPtr owner-like field baseline を RegionToken.ptr だけの 1 件へ下げる。
BYTEBUILDER-GROW-CLEANUP-STILL-USESStage 6 の byte buffer cleanup issue。2026-05-14 に fixed。grow failure cleanup を dealloc_region owner-token consumption へ揃え、通常 stdlib 実装の unreachable を排除する。
RV-STDLIB-004Stage 6 の collection API legacy bug issue。2026-05-20 に closure audit 済み。現行 public surface は Copy-only constructor / update / observer / cleanup と横断 source policy で guarded になり、旧 free bug の入口は閉じた。final non-Copy payload support は NON-COPY-COLLECTION-PAYLOAD-SUPPORT で継続する。
NON-COPY-COLLECTION-PAYLOAD-SUPPORTStage 6 の final collection architecture issue。compiler-issued owner token、InitializedCell / Resource IR state、owner-preserving move-out / replace / drop traversal を generic proof boundary へ接続する。
HASHMAP-AND-HASHSET-CLEANUP-CONTRACTStage 6 の hash collection cleanup contract child issue。2026-05-15 に fixed。HashMap / HashSet の free が key / value / hasher Copy-only contract を維持することを doctest と source policy で固定した。
HASHMAP-AND-HASHSET-ROOT-FACADES-REStage 6 の hash collection facade child issue。2026-05-15 に fixed。HashMap / HashSet root facade が internal storage/probe/rehash helper を再公開しないことを source policy と compile-fail doctest で固定した。
VEC-STORAGE-FACADE-RE-EXPORTS-ALLOCAStage 6 の Vec storage facade child issue。2026-05-15 に fixed。Vec root/storage facade が allocation / storage-only cleanup helper を再公開しないことを source policy と compile-fail doctest で固定した。
BLOOM-FILTER-FREE-DROPS-HASHER-WITHOStage 6 の BloomFilter cleanup child issue。2026-05-15 に fixed。BloomFilter.free / CountingBloomFilter.free.T: HashKey&Copy,.H: Hasher<.T>&Copy に揃え、Drop traversal なしに non-Copy hasher を破棄する経路を閉じる。
BLOOMFILTER-CLEAR-ACCEPTS-UNCONSTRAIStage 6 の BloomFilter mutating API child issue。2026-05-15 に fixed。BloomFilter.clear / CountingBloomFilter.clear.T: HashKey&Copy,.H: Hasher<.T>&Copy に揃え、forged non-Copy hasher aggregate を clear だけ通す経路を閉じる。
BYTEBUF-AND-BYTEBUILDER-EXPOSE-EMPTYStage 6 の byte buffer empty sentinel issue。2026-05-15 に fixed。zero-size RegionToken<u8> sentinel helper を private にし、公開 API を typed empty constructor へ限定する。
FS-DIR-READER-STILL-DEPENDS-ON-RAW-VStage 6 の fs dir reader migration issue。2026-05-15 に fixed。fs_sort_strings&Vec<str> public boundary に移し、std/fs/dir/read_fd.nepl から旧 Vec.data raw storage 依存を削除した。
VEC-IN-PLACE-SORT-APIS-KEEP-PURE-EFFStage 6 の Vec sort effect contract issue。2026-05-15 に fixed。backing storage を書き換える sort helper / public in-place sort / raw slice sort / owner-returning sort wrapper を impure *> signature へ揃え、observer helper は pure のまま分離した。
VEC-ROOT-FACADE-RE-EXPORTS-RAW-ELEMEStage 6 の Vec public/raw facade split issue。2026-05-15 に root alloc/collections/vec から unchecked vec/raw re-export を外した。その後 ISS-20260519T124203801Z-VEC-RAW-ELEMENT-HELPERS-ARE-DIRECTLY-85EBD72F で explicit alloc/collections/vec/raw import 自体が通常ソースの bypass になることを確認し、raw element operation は public/direct-import module ではなく検査済み操作と同じ source file 内に閉じる方針へ更新した。
VEC-SORT-FACADE-RE-EXPORTS-RAW-MEMPTStage 6 の Vec sort public/raw facade split issue。2026-05-15 に fixed。canonical alloc/collections/vec/sort から raw MemPtr sort helper と sort_i32 raw slice adapter を外した。後続の VEC-SORT-RAW-HELPERS-ARE-DIRECTLY-CA で explicit sort/raw/* import 境界も通常ソースから呼べる bypass と分かったため、raw traversal は direct-importable module ではなく各 sort 実装ファイル内の private boundary に閉じる。
VEC-SORT-MERGE-SOURCE-POLICY-STILL-EStage 6 の Vec sort/merge source policy issue。2026-05-15 に fixed。sort/merge facade は merge/api だけを再公開し、raw merge/buffer / merge/range helper を root facade へ戻さないことを固定した。後続の VEC-MERGE-SORT-RAW-HELPERS-ARE-DIREC で explicit merge/buffer / merge/range import 自体も通常ソースの bypass と分かったため、merge scratch / range traversal は merge/api.nepl file 内の private boundary に閉じる。
VEC-MERGE-SORT-RAW-HELPERS-ARE-DIRECStage 6 の Vec merge raw helper direct-import issue。2026-05-19 に fixed。sort/merge/buffer.neplsort/merge/range.nepl を削除し、sort_merge_buffer_get / sort_merge_buffer_set / sort_merge_range_datamerge/api.nepl の private helper に統合した。
VEC-EMPTY-CONSTRUCTOR-ACCEPTS-NON-COStage 6 の Vec empty constructor contract issue。2026-05-15 に fixed。vec_empty<T>.T: Copy に限定し、allocation なしの Empty state でも unsupported Vec<NonCopyPayload> owner aggregate を safe surface へ出さない。
VEC-OWNER-RETURNING-ERROR-ACCESSORSStage 6 の Vec Copy-only error recovery surface issue。VecPushError<T> / VecTransformError<T> / VecSortMergeError<T> の owner-returning accessor が unconstrained のまま残っていた。2026-05-18 に fixed。vec_push_error_vec<T> / vec_transform_error_vec<T> / vec_sort_merge_error_vec<T>.T: Copy に限定し、non-Copy payload の public recovery surface は OwnedBuffer<T> initialized cell / drop traversal 完成まで閉じる。2026-05-22 に internal grow recovery は VEC-REALLOCATION-HELPER-STILL-REQUIR で private storage-only helper へ整理し、public accessor としては残さない方針へ更新した。
VEC-PUSH-FAILURE-MUST-RETURN-REJECTEStage 6 の Vec push owner recovery surface issue。VecPushError<T>Vec<T> だけを返し、rejected item: T を型で返せないままだった。2026-05-22 に fixed。VecPushRejected<T> を追加し、VecPushError<T>rejectedStdErrorKind を保持する。vec_push_error_rejected<T> は non-Copy owner recovery 用に両 owner をまとめて返し、vec_push_error_vec<T: Copy> は Copy payload 用の便宜 accessor として残す。
COLLECTION-OWNER-RETURNING-ERROR-ACCStage 6 の collection owner recovery source policy issue。owner-returning error accessor の Copy-only policy が Vec 専用検査に寄っていた。2026-05-18 に fixed。Error<...> 値を消費して generic owner を返す関数型シグネチャを横断検出し、collection family ごとの個別リストなしに owner recovery surface の Copy bound を監視する。
VEC-GROW-REIMPLEMENTS-REGIONTOKEN-REStage 6 の Vec / ByteBuilder RegionToken realloc boundary issue。2026-05-15 に fixed。core/mem に owner-preserving realloc_region_bytes_keep<T> を追加し、Vec.push の grow capacity を payload 上限で証明してから realloc するようにした。同時に Resource IR owner checker が非所有 MemPtr 集約値の raw-address alias を let/read/assign 越しに保持し、Ok / Err 両 variant の free obligation owner を証明できるようにした。
STD-FS-AND-STDIO-ROOT-FACADES-RE-EXPStage 6 の std fs/stdio public/raw facade split issue。2026-05-15 に fixed。root std/fsstd/stdio から raw ABI submodule re-export を外し、WASI / LLVM syscall helper は explicit raw submodule import 境界へ閉じた。
STD-FS-FD-WRITE-SCRATCH-STILL-USES-MStage 6 の std/fs fd_write scratch owner issue。std/fs/write/fd.nepl の iovec / nwritten scratch が MemPtr<u8> owner API に依存していた。2026-05-16 に fixed。fd_write scratch を RegionToken<u8> owner に移し、fs_fd_write_from_result へ渡す値は non-owning view だけにした。2026-05-20 の STD-FS-FD-IO-RAW-MEMPTR-HELPERS-REMA で raw ABI layout helper も direct-importable std/fs/raw/fd_io ではなく std/fs/write/fd.nepl の private boundary に閉じた。
STD-FS-OPEN-FD-OUT-SCRATCH-STILL-USEStage 6 の std/fs fd lifecycle scratch owner issue。std/fs/fd.nepl の path_open fd_out scratch が MemPtr<u8> owner API に依存していた。2026-05-16 に fixed。fd_out scratch を RegionToken<u8> owner に移し、raw fd_out address は fs_open_with_flags 内の non-owning view からだけ得る。
STD-FS-STAT-BUFFER-STILL-USES-MEMPTRStage 6 の std/fs stat scratch owner issue。std/fs/stat.nepl の path_filestat_get out-buffer が MemPtr<u8> owner API に依存していた。2026-05-16 に fixed。filestat scratch を RegionToken<u8> owner に移し、raw filestat address は fs_path_filetype 内の non-owning view からだけ得る。依存先の Result<Vec<i32>, i32> raw identity false positive は VEC-OWNER-RESULT-RETURN-TRIPS-RAW-ID に分離した。
STD-FS-FD-READ-SCRATCH-STILL-USES-MEStage 6 の std/fs fd_read scratch owner issue。std/fs/read/fd.nepl の growable read buffer / iovec / nread scratch が MemPtr<u8> owner API に依存していた。2026-05-16 に fixed。read buffer と scratch を RegionToken<u8> owner に移し、raw ABI helper へ渡す値は region_ptr 由来の non-owning view だけにした。finish/discard helper も RegionToken<u8> を消費する。
STD-FS-FD-IO-RAW-MEMPTR-HELPERS-REMAStage 6 の std/fs fd I/O public raw surface issue。std/fs/raw/fd_io の raw MemPtr fd_read/fd_write helper が direct import 可能だった。2026-05-20 に fixed。std/fs/raw/fd_io.nepl を削除し、read helper / finish / discard は std/fs/read/fd.nepl、write helper は std/fs/write/fd.nepl の private owner boundary に移した。
STD-FS-DIR-READ-SCRATCH-STILL-USES-MStage 6 の std/fs fd_readdir scratch owner issue。std/fs/dir/read_fd.nepl の dirent buffer / used out-pointer scratch が MemPtr<u8> owner API に依存していた。2026-05-16 に fixed。fd_readdir buffer と scratch を RegionToken<u8> owner に移し、raw ABI address は region_ptr 由来の non-owning view だけにした。
STD-FS-LLVM-CSTR-SCRATCH-STILL-RETURStage 6 の std/fs LLVM fallback C string owner issue。std/fs/raw/llvm.nepl の C string scratch helper が Result<MemPtr<u8>, i32> を返していた。2026-05-16 に fixed。C string scratch を RegionToken<u8> owner に移し、syscall address は region_ptr 由来の non-owning view だけにした。
STD-ENV-CLIARG-RAW-SCRATCH-STILL-USEStage 6 の std/env cliarg raw argv scratch owner issue。std/env/cliarg/raw.nepl の metadata / argv / LLVM cmdline scratch が MemPtr<u8> owner API に依存していた。2026-05-16 に fixed。argv raw boundary scratch を RegionToken<u8> owner に移し、raw ABI と checked byte access は region_ptr 由来の non-owning view だけにした。
STD-ENV-CLIARG-GET-CHECKED-ACCEPTS-NStage 6 の std/env cliarg memory-safety issue。cliarg_get_checked が負 index を拒否せず raw slot 計算へ進む。2026-05-16 に fixed。raw helper 自体にも idx < 0 gate を追加し、public facade を迂回しても argv slot address を負 offset で計算しない。
STD-ENV-CLIARG-CSTR-DOCTESTS-USE-MEMStage 6 の std/env cliarg doctest issue。cstr.nepl doctest が ordinary source から mem_ptr_add / store_u8 を使う。2026-05-16 に fixed。NUL を含む string literal の string_data_ptr を使う fixture に直し、ordinary doctest から raw memory write を行わない。
VEC-OWNER-RESULT-RETURN-TRIPS-RAW-IDStage 6 の Resource IR raw identity false positive。Result<Vec<i32>, i32> owner return が resource.raw.identity_escape になる。2026-05-16 に fixed。RawIdentityTable が descendant projection を aggregate root へ粗く持ち上げていたため、RegionToken.raw identity が Vec.len など public scalar field へ混入していた。raw identity transfer を projection 精度へ戻し、i32 / MemPtr raw address leaf の拒否は維持した。
FS-NORMALIZE-OWNER-SUMMARIES-LEAK-VEStage 6 の Resource IR owner summary 残件。raw identity false positive 修正後、std/fs/path/normalizeResult<Vec<T>, E> / Result<StringBuilder, E> owner return が resource.owner.maybe_leak になっていた。2026-05-16 に fixed。callee owner return summary を raw owner alias walk へ反映し、wrapper call 経由の StringBuilder -> ByteBuilder -> RegionToken 消費と Result payload owner return を source-level proof として接続した。
RESOURCEIR-OWNER-SUMMARY-STILL-TREATStage 6 の Resource IR owner summary issue。Copy str view と owner-backed str storage を型だけで同一視し、stdlib_map path resolution では resource.owner.use_after_move、std/test report branch flow では resource.owner.maybe_leak を出していた。2026-05-18 に fixed。Copy owner leaf は TypeCtx::is_copy と owner leaf 構造だけでなく、OwnerTable / raw alias 解決後に transferable owner がない場合だけ view facts として copy する。本物の owner-backed str は通常の owner transfer に残し、return storage-origin owner escape も return-value operation として閉じる。stdlib module allowlist は追加していない。
SELFHOST-STDLIB-MAP-GRAPH-DOCTEST-EXStage 6 の compiler/static-check performance issue。tests/stdlib/neplg2_stdlib_map.n.md::doctest#2 は owner diagnostic 解消後も default 60000ms compile timeout を超え、300000ms 枠では compile 約74.8秒、run 約29msで pass していた。2026-05-18 に fixed。timeout 引き上げではなく、module graph の通常経路を full parser / lexer / AST から切り離し、module/vfsmodule/import_scan に分離した。graph は source text の top-level #import から SelfhostImportRecord を得るため、静的検査対象を必要な import fact に狭め、default timeout 内で pass する。stdlib module allowlist は追加していない。
RESOURCE-PROOF-PRIMITIVE-CLASSIFICATStage 6 の compiler-core registry issue。memory primitive role 判定が複数 checker の string match に分散していた。2026-05-16 に fixed。resource_primitives に compiler memory type / memory helper primitive registry を置き、Resource IR lowering / owner summary / source capability evidence は typed enum / query を通す。stdlib module allowlist は追加していない。
COMPILER-MEMORY-TYPE-IDENTITY-IS-INFStage 6 の compiler-core identity issue。MemPtr / RegionToken の raw pointer / owner token 判定が型名 string に依存していた。2026-05-16 に fixed。source capability で証明された compiler memory type definition だけを TypeCtx identity として登録し、Resource IR は TypeCtx::compiler_memory_type を読む。
OWNER-BACKED-AGGREGATE-ROOT-STILL-USStage 6 の compiler-core typecheck issue。owner-backed aggregate 判定の根になる owner token 分類が struct policy metadata を読んでいた。2026-05-16 に fixed。target_is_compiler_owner_tokenresource_primitives::type_is_owner_token を使い、TypeCtx の証明済み owner-token identity だけを semantic root にする。
SOURCE-CAPABILITY-EVIDENCE-USES-PERStage 6 の compiler-core source proof issue。shared traversal 導入後も raw memory / owner aggregate evidence が domain 別 collector と loader 組み立てに残っていた。2026-05-16 に fixed。SourceCapabilityProofSourceCapabilityProofCollector を導入し、loader は module_source_capabilities だけを消費する。raw memory / owner aggregate は evidence classifier へ縮小し、個別 proof engine を増やせない source policy を追加した。
SOURCE-CAPABILITY-COMPILER-MEMORY-TYStage 6 の compiler-core source proof issue。compiler memory type definition evidence だけが unified proof の外で Module.root.items を再走査していた。2026-05-16 に fixed。SourceCapabilityObserver::observe_struct_definition で struct definition evidence を shared traversal から通知し、SourceCapabilityProofCollector が compiler memory type capability を同じ proof value に記録する。
SOURCE-CAPABILITY-PROOF-IS-STILL-CONStage 6 の compiler-core source proof issue。unified proof は実装済みだが、compiler/typecheck/resource gate は file-level SourceCapabilities を authority として消費していた。2026-05-17 に fixed。SourceCapabilityUseSite / SourceCapabilitySpan を導入し、raw operation / raw body / raw address view / owner aggregate / compiler memory definition / compiler memory field projection を exact use-site proof artifact として保持する。production gate の _allowed_at query は file-level capability へ fallback しない。
SOURCE-CAPABILITY-RAW-HELPER-BODY-EVStage 6 の compiler-core source proof issue。nested function の raw evidence が外側 raw helper 名の body evidence として扱われていた。2026-05-16 に fixed。raw helper definition self-operation evidence は現在 walk 中の function frame にだけ記録し、nested body の operation evidence は module-level exact operation evidence に留める。
RAW-ADDRESS-VIEW-SOURCE-PROOF-GRANTSStage 6 の compiler-core source proof issue。raw address view helper evidence が compiler memory representation boundary まで許可していた。2026-05-16 に fixed。RawAddressViewBoundary を追加し、address-view evidence と restricted constructor / field structural evidence を別 capability にした。MemoryHelperPrimitiveis_raw_address_view_boundary_evidence の exhaustive match で role を分け、RegionNew を address-view evidence から除外する。raw operation helper definition evidence も actual raw operation / raw body evidence だけで更新する。
BTREEMAP-FOCUSED-DOCTESTS-STILL-HIDEStage 6 の Resource IR owner summary / doctest migration issue。BTreeMap stdout report 化で、owner-token-backed aggregate の metadata i32 leaf を free obligation owner と誤分類する false positive が露出した。2026-05-16 に fixed。condition/value i32 leaf と raw owner candidate leaf を分離し、owner-token-backed aggregate の free obligation candidate を RegionToken.raw に限定した。BTreeMap 名や stdlib module allowlist ではなく、source proof、型構造、Resource IR summary から導出する。
VEC-STORES-BACKING-STORAGE-DIRECTLYStage 6 の Vec facade / backing storage owner issue。Vec<T>len/cap/storage を直接持っていた。2026-05-16 に fixed。Vec<T>buffer: OwnedBuffer<T> facade にし、2026-05-20 時点では OwnedBuffer<T>len/initialized_len/cap/storageVecStorage<T>::Empty/Owned(RegionToken<T>) を保持する。source policy は旧 direct field、旧 constructor、initialized_len を欠く旧 3-field buffer 形状を拒否する。
STD-ENV-CLIARG-ROOT-MIXES-RAW-ARGV-BStage 6 の std env cliarg public/raw facade split issue。2026-05-15 に fixed。root std/env/cliarg から raw argv scratch / out pointer 実装を外し、explicit std/env/cliarg/rawstd/env/cliarg/cstr 境界へ分離した。
SELF-HOST-CLI-ARGS-PARSER-READS-VECStage 6 の self-host CLI args parser / Vec<str> observer issue。2026-05-15 に fixed。parser は raw Vec storage を走査せず、borrowed Vec<str> と public v::get / v::len だけで CLI token を読む。
KPPREFIX-EXPOSES-COPYABLE-RAW-PREFIXStage 6 の KP prefix raw owner boundary issue。2026-05-15 に fixed。PrefixI32Vec<i32> owner handle にし、copyable raw pointer owner と public raw address prefix API を削除した。
KPFENWICK-AND-KPDSU-EXPOSE-RAW-I32-OStage 6 の KP Fenwick / DSU raw owner handle issue。2026-05-15 に fixed。Fenwick / DisjointSet owner API に移し、public raw i32 handle と raw memory helper import を削除した。
KPGRAPH-EXPOSES-DENSE-MATRIX-RAW-I32Stage 6 の KP graph dense matrix raw owner issue。2026-05-15 に fixed。DenseGraphAdjacencyMatrix owner wrapper にし、raw matrix pointer API と raw BFS API を削除した。
KPGRAPH-UNSAFE-UNWRAP-POLICY-STILL-EStage 6 の KP graph source policy issue。2026-05-15 に fixed。旧 raw BFS helper の存在を要求する stale policy を廃止し、typed owner BFS API の Result / Vec / cleanup contract を検査する。
KPSEARCH-STILL-IMPLEMENTS-PUBLIC-VECStage 6 の KP search raw storage view issue。2026-05-15 に fixed。query API を borrowed &Vec<i32> にし、raw memory import/helper と mem_ptr_addr data_mem_ptr 依存を削除した。
DIAG-RENDERER-READS-DIAGS-VEC-STORAGStage 6 の diagnostic renderer / Diags storage boundary issue。2026-05-15 に fixed。alloc/diag/diag.nepldiags_to_string を raw Vec storage scan から v::len / v::get の Copy-safe borrowed observer へ移し、renderer file から raw memory import を削除した。
DIAGS-ERROR-OBSERVER-SCANS-VEC-STORAStage 6 の Diags read-only observer / storage boundary issue。2026-05-15 に fixed。alloc/diag/error/diags.nepldiags_has_errors を raw Vec storage scan から v::len / v::get の Copy-safe borrowed observer へ移し、Diags owner helper から raw memory import を削除した。
ALLOC-STRING-ROOT-RE-EXPORTS-RAW-STRStage 6 の string public/raw facade split issue。2026-05-15 に fixed。root alloc/string から raw storage / UTF-8 memory helper re-export を外し、raw helper 利用は explicit alloc/string/storage / alloc/string/utf8 import 境界へ閉じた。
ALLOC-STRING-FACADE-SOURCE-POLICY-STStage 6 の string facade source policy issue。2026-05-15 に fixed。alloc/string root policy を safe submodule 再公開だけに更新し、storage / utf8 raw helper が root から再公開されないことを固定した。
STD-TEXT-ROOT-RE-EXPORTS-RAW-UTF-8-MStage 6 の text public/raw facade split issue。2026-05-15 に fixed。root std/text から raw UTF-8 validation / decode helper re-export を外し、checked conversion と raw MemPtr helper 境界を分離した。
STD-IO-DOCTEST-OMITS-EXPLICIT-IOTARGstdlib facade target contract issue。2026-05-15 に fixed。std/io は public API signature に出る ReadStream / WriteStreamstd/iotarget から再公開し、target enum 定義は std/iotarget に集約する。

新しい個別 bug は、次の基準で追加する。

  • 現行 checker の false negative / false positive が明確なら、既存 regression child issue として追加する。
  • Resource IR 導入でまとめて直すべき構造問題なら、RV-CORE-009 の子として追加する。
  • stdlib API 移行が必要な場合は、compiler issue と混ぜず STDLIB-RAW-MEMORY-BACKED-APIS-REQUIR または該当 stdlib issue へ分ける。

検証計画

focused local tests

大規模修正中は、変更箇所に応じて focused test を選ぶ。

変更local test
issue metadata / docsnode nodesrc/issues.js check
Resource IR 型定義 / loweringcargo test -p nepl-core --test move_check、Resource IR snapshot test
move/borrow/lifetimecargo test -p nepl-core --test move_checktests/compiler/move_check.n.md focused run
effect / raw memorytests/compiler/move_effect.n.md focused run
stdlib memory API該当 tests/stdlib/*.n.md focused run

全体 test は GitHub Actions を主に使い、local では変更に関係する範囲に絞る。

regression 必須カテゴリ

  • same-place raw load の二重 move。
  • MemPtr copy は許可されるが free obligation は複製されない。
  • live non-Copy payload を含む storage dealloc / realloc / bulk copy / byte overwrite の拒否。
  • enum payload / aggregate field / function return / callback 経由の resource effect 伝播。
  • branch / loop merge 後の maybe-moved / maybe-borrowed の保守的検査。
  • unique borrow 中の write / move / dealloc 拒否。
  • shared borrow 中の mutation 拒否。
  • internal allocation が public raw identity を漏らさない場合だけ surface pure へ fold されること。

self-host への影響

NEPLg2 self-host compiler は、S1/S2 の lexer/parser/module loader など pure data model から進められる。ただし、S3 以降の resource checker、diagnostic buffer、AST arena、token buffer、byte/string builder は、この文書の memory model を前提にする。

self-host 実装側の禁止事項:

  • MemPtr を owner として保持する新規 public API を増やさない。
  • raw address i32 を compiler data structure の通常 field に持ち込まない。
  • drop obligation を stdlib の手作業 cleanup だけで完結させる設計にしない。

2026-05-20 の進捗:

  • ISS-20260520T014008212Z-SELF-HOST-OWNER-OBLIGATION-IS-NOT-RE-EB1CB46B で、self-host 側の free obligation owner を core/resource/owner.nepl の typed model と core/proof の Owner domain に載せた。
  • SelfhostOwnerStateNoOwner / Owned(storage) / Moved(storage) / Released(storage) を表し、SelfhostOwnerEventKindAcquire / MoveOut / Release / BorrowView を表す。BorrowViewMemPtr 由来の non-owning pointer view を得る操作であり、owner state を消費しない。
  • owner transition の不正理由は SelfhostOwnerTransitionError enum と issue payload に残す。後続 Resource IR lowering / checker は checker-local owner state machine を持たず、source-derived owner event fact producer として core/proof の generic solver に接続する。

許容される移行措置:

  • 既存 Vec / StringBuilder を使った S1/S2 実装。
  • raw-backed implementation を internal module に閉じた wrapper として使う。
  • Resource IR 導入前の暫定 compiler regression を維持するための保守的 resource.cell.* / resource.owner.*

2026-04-30 設計確認

静的検査設計確認 2026-04-30 で、現行 Rust 実装、self-host 計画、stdlib memory model の整合を再確認した。

静的検査 soundness review 2026-04-30 では、pass 順序、現在の authority、Resource IR gate の hard-error 範囲、旧 HIR checker / shadow-only behavior に残る未完了点を追加で確認した。

判定は次の通り。

  • Resource IR の data model、coverage gate、CellState / OwnerState / BorrowState gate、enum-first diagnostic の方向性は妥当である。
  • 現行 pipeline は drop 未挿入 source semantics を monomorphize した reachable HIR を Resource IR check に渡し、checked ResourceDropElaborationPlan を生成する。実 drop call 生成は passes::insert_resource_drops がこの plan を消費して行うため、旧 passes::move_check::run fallback と旧 HIR passes::insert_drops 呼び出しはいずれも 2026-05-06 に削除済みである。生成 drop が source violation を隠さないよう、Resource IR gate は drop 挿入前の HIR に対して実行する。
  • ResourceCheckDiagnostic::CellUnavailableResourceOwnerDiagnostic::* は compiler diagnostic で resource.cell.*resource.owner.* に分離済みである。今後も D3100 相当の粗い raw bucket に戻さず、原因分類を enum-first で維持する。
  • UnsafeMemoryInPureFunction は 2026-05-06 時点で Resource IR gate から effect.pure.calls_impure へ error 化済みである。ただし、configured stdlib の core/mem.neplalloc/string.neplalloc/string/storage.nepl など compiler-owned raw-memory-boundary capability を持つ source では、Stage 6 の stdlib migration が完了するまで移行中許可を維持する。この許可は loader の configured stdlib_root から計算した exact path に限定し、任意の同名 suffix path は許可しない。
  • self-host の S1/S2 は進められるが、S3 以降の typecheck / Resource IR / diagnostic aggregation では raw header collection や MemPtr owner discipline を中核に持ち込まない。

追加精査で、ResourceDiagnosticCode 自体は Move / Borrow / Cell / Owner / Raw / Lower に分離済みであることを確認した。2026-05-06 時点で drop elaboration authority も checked Resource IR plan に統合済みであり、旧 HIR scope walker を維持する方針は残さない。設計上の未完了点は、raw-memory-boundary capability による stdlib 移行中許可が残っていること、stdlib の owner token / collection storage state が compiler-issued capability に揃い切っていないこと、Stage 4 authority path の full review / regression を継続することである。

2026-05-06 の Stage 5 追記として、host effect operation と raw/host effect count は enum-first の Resource IR 表現へ移行済みである。ExternalIo / Nondet / UnsafeMemory は pure function 境界で Resource IR diagnostic から compiler error へ接続される。残件は、raw-memory-backed stdlib の public API を Stage 6 で internal/public 境界へ分け、raw identity と owner token を safe surface へ漏らさない形へ移行することである。

2026-05-16 の Stage 6 追記として、core/mem / mem/pointer safe facade から alloc_ptr / realloc_ptr / dealloc_ptr の re-export を外した。mem_ptr_add は low-level alloc owner wrapper から分離して pointer/view に移し、non-owning pointer view helper と storage owner API の責務を分けた。#import "core/mem" as * だけでは MemPtr<T> owner API へ到達できないことを compile_fail と source policy で固定した。続く ISS-20260515T163252091Z-PUBLIC-ALLOC-PTR-APIS-STILL-ENCODE-F-EECDD686 の解決で direct core/mem/pointer/alloc module 自体も削除し、public / direct import 可能な MemPtr<T> allocation owner API は残っていない。

同日の追加対応として、std/stdio/write/byte.neplprint_byte は 1 byte scratch buffer を alloc_region<u8> / region_ptr / checked store_u8 / dealloc_region<u8> へ移行した。これは syscall iovec のような ABI raw boundary ではなく、単なる stdout byte adapter の private buffer なので、MemPtr<u8> を free owner として扱う必要はない。Stage 6 の残件は std/stdio/write/fd.nepl など raw ABI scratch を持つ箇所であり、そこでは owner token と raw ABI view を分けて移行する。

さらに std/stdio/write/fd.nepl の fd_write loop も RegionToken<u8> owner 境界へ移行した。iovec / nwritten scratch の free obligation は iov_region / nwritten_region が持ち、raw ABI layout の store/load は std/stdio/raw.neplstdio_fd_write_from_result に閉じる。これにより std/stdio/write 経由の stdout/stderr write path は direct alloc_ptr owner API を必要としない状態になった。

同日の read 側対応として、std/stdio/read の read_all/read_line buffer と fd_read scratch も RegionToken<u8> owner 境界へ移行した。続いて read/textByteBuf から str への変換で残っていた resource.owner.maybe_leak は、string_finishRegionToken.rawMemPtr owner wrapper に戻していた stale 境界を削除することで解消した。string_finish は raw owner を直接消費してヘッダ長を書き、同じ raw owner を str に移すため、Stage 6 の「MemPtr は non-owning pointer、free obligation owner は token/storage 側」という責務分割に沿う。

さらに std/fs/write/fd.nepl の fd_write loop も RegionToken<u8> owner 境界へ移行した。fs_write_fd_mem_result は iovec / nwritten scratch の free obligation を iov_region / nwritten_region に持たせる。2026-05-20 の追加整理で、raw ABI layout store/load も direct-importable std/fs/raw/fd_io.nepl から外し、std/fs/write/fd.nepl の private fs_fd_write_from_result に閉じた。これにより std/fs/write の fd write path は direct alloc_ptr / dealloc_ptr scratch owner API も public raw MemPtr helper も必要としない。

同じ std/fs の fd lifecycle 境界として、std/fs/fd.neplfs_open_with_flagsRegionToken<u8> owner 境界へ移行した。path_open の fd_out scratch は fd_out_region が所有し、raw fd_out address の store/load は関数内の region_ptr view からだけ行う。これにより std/fs facade から再公開される open/close 経路に direct alloc_ptr / dealloc_ptr scratch owner API を残さない。

std/fs/stat.neplfs_path_filetypeRegionToken<u8> owner 境界へ移行した。path_filestat_get の 64 byte out-buffer は stat_region が所有し、filetype byte の raw store/load は fs_path_filetype 内の region_ptr view からだけ行う。focused doctest は依存先 fs_normalize_range_pushResult<Vec<i32>, i32> owner return が resource.raw.identity_escape になる core false positive に到達したため、これは ISS-20260515T182630578Z-VEC-OWNER-RESULT-RETURN-TRIPS-RAW-ID-421E44DD として別 issue に分離し、Resource IR 側で正確に修正する。

同じく Stage 6 の fd read 境界として、std/fs/read/fd.neplfs_read_fd_bytesRegionToken<u8> owner 境界へ移行した。growable read buffer、iovec、nread はそれぞれ buf_region / iov_region / nread_region が free obligation を持ち、raw ABI helper へ渡す MemPtr<u8>region_ptr / mem_ptr_add から得る non-owning view に限定した。grow は realloc_region_bytes_keep<u8> で旧 owner を失わずに行い、fs_finish_read_buffer / fs_discard_read_bufferRegionToken<u8> owner を消費する signature に揃えた。2026-05-20 の追加整理で、fd_read raw layout helper と finish/discard helper は std/fs/raw/fd_io.nepl から std/fs/read/fd.nepl の private boundary へ移した。これにより std/fs/read の fd read path は direct alloc_ptr / realloc_ptr / dealloc_ptr scratch owner API も public raw MemPtr helper も必要としない。

同じく Stage 6 の directory read 境界として、std/fs/dir/read_fd.neplfs_read_dir_fdRegionToken<u8> owner 境界へ移行した。fd_readdir の dirent data buffer と used out-pointer scratch は buf_region / used_region が free obligation を持ち、raw ABI へ渡す address は region_ptr から得る non-owning MemPtr<u8> view だけにした。entry name の構築・蓄積・sort は Vec<str> public API 境界を通すため、directory listing path でも MemPtr<u8> を buffer owner として扱わない。

LLVM fallback の C string 境界も同じ Stage 6 方針へ揃えた。std/fs/raw/llvm.nepl__fs_copy_to_cstrResult<RegionToken<u8>, i32> を返し、path byte copy と openat syscall address 取得は region_ptr 由来の non-owning view だけで行う。wasi_path_open は syscall 後に cpath_regiondealloc_region<u8> で閉じるため、std/fs 配下に direct alloc_ptr / dealloc_ptr scratch owner API を残さない。

std/env/cliarg/raw.nepl も Stage 6 の同じ境界へ移した。argc metadata、argv pointer array、argv byte buffer、LLVM /proc/self/cmdline C string、cmdline temporary buffer は RegionToken<u8> owner が free obligation を持ち、args_sizes_get / args_get / checked byte access へ渡す MemPtr<u8>region_ptr 由来の non-owning view に限定する。これで std/fs / std/stdio / std/env/cliarg の主要 raw-backed scratch path は direct low-level allocation owner API を使わない。

同じ確認で cliarg_get_checked が負 index を拒否せず raw slot 計算へ進む memory-safety issue と、std/env/cliarg/cstr.nepl doctest が ordinary source から mem_ptr_add / store_u8 を使う stale fixture issue を発見した。前者は raw helper 自体に idx < 0 gate を追加して修正済みであり、public facade を迂回しても argv slot address を負 offset で計算しない。後者も NUL を含む string literal の string_data_ptr を渡す fixture に直し、ordinary doctest から raw memory write を行わない形で修正済みである。

ISS-20260515T182630578Z-VEC-OWNER-RESULT-RETURN-TRIPS-RAW-ID-421E44DD は 2026-05-16 に修正した。根本原因は、RawIdentityTable の prefix replacement が descendant projection の raw identity を返却 aggregate root へ追加していたことである。これにより RegionToken.raw / owner descendant の identity が Result::Ok(Vec).field0 など通常 scalar field に混入し、Vec owner return を public raw address escape と誤診断していた。修正後の std/fs/stat.nepl focused doctest は raw identity では止まらず、次の resource.owner.maybe_leak に進んだため、Vec / StringBuilder owner payload の return summary 証明残件を ISS-20260515T190417577Z-FS-NORMALIZE-OWNER-SUMMARIES-LEAK-VE-510B86A4 として分離した。

ISS-20260515T190417577Z-FS-NORMALIZE-OWNER-SUMMARIES-LEAK-VE-510B86A4 は 2026-05-16 に修正した。根本原因は、Resource IR owner summary の raw owner alias walk が callee の owner return summary を call output へ反映せず、string_builder_into_byte_builder の parameter-derived projection return と byte_builder_free の consumed projection が wrapper 関数内で接続されなかったことである。修正では direct call の root/projection/variant payload owner return を summary-aware raw alias walk に伝播し、function_returns_raw_owner_from も summary-aware にした。Result::Ok payload が parameter owner と fresh owner のどちらでも所有者を返す場合は、Maybe で leak 扱いにせず UnknownSource { extent } として所有者存在を保持する。これは stdlib 関数名 whitelist ではなく、source-level owner transfer と callee summary から導出される proof である。std/fs/stat.nepl focused doctest は total=1, passed=1 になった。

ISS-20260516T005642964Z-VEC-STORES-BACKING-STORAGE-DIRECTLY--2407B1D0 は 2026-05-16 に修正した。Stage 6 / Stage D の進捗として、Vec<T>buffer: OwnedBuffer<T> だけを持つ facade になり、OwnedBuffer<T>len/cap/storageVecStorage<T>::Empty/Owned(RegionToken<T>) を保持する。observer / mutation / transform / sort wrapper はすべて OwnedBuffer<T> 経由で storage owner を参照または消費し、source policy は旧 Vec<T> len cap storage constructor と Vec<T> 直下の direct field を退行として拒否する。これは stdlib module 名 whitelist ではなく、source 型定義と constructor 形状そのものを検査する退行防止である。残件は OwnedBuffer<T> に initialized prefix / moved slot / drop traversal と compiler-issued owner token を接続し、non-Copy payload collection を Copy-only raw helper から分離することである。

ISS-20260519T190908506Z-OWNEDBUFFER-CONFLATES-LOGICAL-LENGTH-60540914 は 2026-05-20 に修正した。OwnedBuffer<T>initialized_len を追加し、public Vec<T> facade から見える logical len と、drop / move state の対象になる initialized prefix を別 field に分離した。現行の public Vec API は引き続き .T: Copy に限定するため、constructor / push / pop / clear / transform の通常成功 path は len == initialized_len を保つ。一方で grow failure や allocation failure の owner-returning branch は initialized_lenlen と別に読み、VecPushError<T> / VecPop<T> 内の owner に保存する。source policy は OwnedBuffer<T> len cap storage 形の旧 constructor と、Vec 直下に initialized_len を戻す退行を拒否する。これは non-Copy drop traversal の完成ではなく、後続の moved slot / initialized cell / drop traversal が接続できる typed state slot を先に作る Stage 6 の前進である。

ISS-20260516T020917148Z-OWNER-AGGREGATE-SOURCE-EVIDENCE-ACCE-5E35D33F は 2026-05-16 に修正した。owner aggregate source capability は、修正前は expression 内の任意の未修飾大文字 symbol を constructor boundary evidence として扱っていた。修正後は evidence 判定を source_capability/owner_aggregate/evidence.rs に分け、constructor evidence は prefix expression の call-head に現れた symbol からだけ導出する。同一 module の enum variant 名は OwnerAggregateEvidenceContext で除外し、consume Diag のような引数位置の大文字値や Ok 1 のような enum variant call では owner aggregate constructor authority を得られない。これは stdlib module ごとの許可ではなく、compiler-owned source に現れた構文証拠をより正確に抽出する authority gate であり、owner-backed aggregate かどうかの semantic proof は typecheck の構造的 owner token 判定と Resource IR 側に残す。

ISS-20260516T021926423Z-RAW-MEMORY-SOURCE-EVIDENCE-ACCEPTS-N-88427FD2 は 2026-05-16 に修正した。raw memory source capability も同様に、修正前は expression 内の任意の raw helper symbol を evidence として扱っていた。修正後は prefix call-position scanner を通し、expression 先頭、および let / set / if / while / address/reference introducer / type annotation / pipe の直後に現れる call head だけを raw helper symbol evidence として扱う。これにより let cur <i32> load_i32 0 のような正当な raw helper implementation evidence は維持しつつ、consume load_i32consume mem_ptr_addr のような値・引数位置の raw helper 名から raw operation / structural boundary authority が出ない。raw body / intrinsic evidence は explicit low-level evidence として維持する。

ISS-20260516T022823182Z-OWNER-AGGREGATE-SOURCE-EVIDENCE-MISS-2CBBEB43 は 2026-05-16 に修正した。owner aggregate 側も raw memory 側と同じ PrefixCallHead tracker を使い、source capability が見る call-head 位置を共通化した。これにより let boxed <OwnerBox<i32>> OwnerBox<i32> regionlet owner <i32> field::get v "owner" のように、let / type annotation の後ろへ constructor / field accessor call が来る正当な compiler-owned source でも必要な boundary evidence を得られる。一方で consume Diag のような非 call-head 大文字値は引き続き evidence にならない。これは module allowlist ではなく、NEPL prefix 構文上の call-position を source proof primitive として共通化する修正であり、owner-backed aggregate かどうかの semantic proof は typecheck / Resource IR 側に残す。

ISS-20260516T024129752Z-OWNER-AGGREGATE-FIELD-EVIDENCE-ACCEP-22239551 は 2026-05-16 に修正した。owner aggregate field evidence は、修正前は call-head が get / get_ref / put という名前なら core/field 由来でなくても field boundary evidence として扱っていた。修正後は owner_aggregate/field_imports.rs#import "core/field" の default alias / explicit alias / open import / merge import / selective import を ImportClause の網羅 match で証明し、その import provenance と call-head symbol が一致する場合だけ field accessor evidence を得る。alloc/collections/vec/query/get など unrelated module の get は evidence にならず、#intrinsic "get_field" / get_field_ref は explicit compiler primitive evidence として別経路に残す。これは stdlib module ごとの allowlist ではなく、source AST の import provenance と prefix call-head を組み合わせた汎用 source proof gate であり、field projection の型・owner 正当性は引き続き typecheck / Resource IR 側で検査する。

ISS-20260516T025931471Z-WINDOWS-STDLIB-PATH-CANONICALIZATION-5C6E2D4E は 2026-05-16 に修正した。Windows では既存 stdlib root の canonicalize()\\?\C:\... 形式を返す一方、存在しない仮想 stdlib child は通常の C:\... 形式で lexical normalize され、configured_stdlib_source_pathstarts_with が false になり得た。修正後は canonicalize 成功時と失敗時の両方で Windows verbatim prefix を通常 prefix に戻してから lexical normalization する。これにより provider / inline test など仮想 stdlib source でも SourceCapabilities の configured stdlib 判定が同じ path 表現で行われ、source capability regression が SourceCapabilities::none を誤って検査する状態を防ぐ。

ISS-20260516T031913953Z-SOURCE-CAPABILITY-PROOF-TRAVERSAL-IS-9E939884 は 2026-05-16 に修正した。SourceCapabilities は path-only allowlist ではなく source evidence を見る形へ移行済みだったが、raw memory と owner aggregate がそれぞれ AST traversal、scope 更新、prefix call-head 判定、raw body descent を持っていたため、capability domain ごとに proof engine が分裂していた。修正後は source_capability/walk.rsSourceCapabilityObserver が module / block / stmt / function body / prefix expression / intrinsic / match arm / raw body traversal を一元的に所有し、raw memory と owner aggregate は observer callback で evidence 分類だけを行う。source policy も walk.rs の call-head tracking、scope update、match arm binding、raw body observation を監視し、個別 collector が PrefixCallHead や match traversal を再実装する退行を拒否する。これにより「source code を基に compiler が性質を証明する」入口が capability ごとの局所 walker ではなく、単一の汎用 traversal invariant に乗る。

ISS-20260516T073151046Z-SOURCE-CAPABILITY-RAW-HELPER-BODY-EV-43BC8055 は 2026-05-16 に修正した。unified proof 導入後、raw helper definition evidence は function walk lifecycle に乗ったが、body evidence を全 active function frame へ伝播していたため、alloc_raw という外側関数の中に load_i32 を呼ぶ nested helper があるだけで Alloc capability まで付与され得た。修正後は現在の function frame だけを更新し、関数名と body evidence の結び付きはその関数自身の body に限定する。さらに ISS-20260516T100329630Z-RAW-ADDRESS-VIEW-SOURCE-PROOF-GRANTS-A2AEFF8E で frame 名を function_has_raw_operation_evidence に改め、address-view evidence では raw helper self-operation を成立させないことを明確にした。nested body の load_i32 は module-level RawMemoryOp::Load evidence として残るため、source AST からの証明力は落とさず、raw helper 名への self-operation 付与だけを lexical function scope に閉じる。

ISS-20260516T082019110Z-SOURCE-CAPABILITY-RAW-EVIDENCE-IGNOR-0C74F9EA は 2026-05-16 に修正した。raw memory source evidence は scope.shadows(symbol) だけを見ていたため、raw::load_i32 のような qualified call-head で raw が引数や local により shadow されていても、helper_base_name が tail の load_i32 を見て raw load capability を付与し得た。修正後は SourceCapabilityScope::shadows_symbol_or_qualifier を共通 API とし、raw memory と owner aggregate の両方が qualified symbol の先頭 qualifier shadowing を同じ rule で拒否する。これにより source capability proof は helper-looking name の tail ではなく、source scope と qualified name 構文を合わせた証拠で raw authority を決める。

ISS-20260516T083402106Z-COMPILER-MEMORY-TYPE-IDENTITY-IS-INF-3F3AF6C8 は 2026-05-16 に修正した。Resource IR の compiler_memory_type_of_type は以前、TypeKind::Struct { name, .. } の name が MemPtr / RegionToken であるかだけを見て compiler memory type とみなしていた。修正後は typecheck が source capability の CompilerMemoryTypeDefinition 証明を持つ struct 登録時だけ TypeCtx::mark_compiler_memory_type を呼び、Resource IR は TypeCtx::compiler_memory_type から証明済み identity を読む。これにより、同名の user struct や未証明 struct は raw pointer / owner token として扱われず、static checker の型 identity は source proof と typecheck registration の接続で成立する。

ISS-20260517T071912004Z-COMPILER-MEMORY-TYPE-DEFINITION-SHAP-EE5DF0E2 も同じ 2026-05-17 に修正した。前項で compiler memory type identity は TypeCtx 登録へ寄ったが、登録前の definition shape proof は source capability AST proof と typecheck typed proof の 2 箇所に raw / size field contract を重複保持していた。修正後は resource_primitives.rsCompilerMemoryFieldSpec::{RawI32, SizeI32}compiler_memory_type_field_specs が field 名・順序・型要求を所有し、source proof と typecheck proof は同じ spec を消費する。これにより MemPtr = non-owning pointer / RegionToken = free obligation owner の型形状証明が 1 つの enum-owned contract になり、source proof と typed proof の drift を source policy と unit test で検出できる。

ISS-20260517T072954044Z-OWNER-TOKEN-LEAF-SUMMARY-DUPLICATES--91D1A194 では、上記の shared field spec を Resource IR owner summary の raw owner leaf 抽出にも接続した。修正前の owner_summary_owner_token_leaf.rsRegionToken.raw を local な field name 判定で探していたため、source proof / typecheck proof では CompilerMemoryFieldSpec を使っていても、owner summary だけが別の契約で raw free obligation leaf を作り得た。修正後は CompilerMemoryType::OwnerTokenCompilerMemoryFieldSpec::RawI32 から raw field index を導出し、さらに type_is_owner_token で TypeCtx に証明済み owner-token identity がある型だけを leaf 化する。同じ field shape を持つ未証明 struct は owner-token leaf にならないため、stdlib module 名の allowlist ではなく source proof / typed registration / Resource IR semantic proof の連鎖で free obligation owner を扱う。

ISS-20260517T074003907Z-RESOURCE-MEMORY-FIELD-PLACE-CONSTRUC-5EF34F4F では、raw owner leaf だけでなく Resource IR 全体の compiler memory field place 構築を同じ shared contract へ寄せた。修正前は place_utils.rslower_raw_address_place.rsinitialized_summary_indirect_release.rsMemPtr.raw / RegionToken.raw / RegionToken.sizeindex: 0/1offset: 0/4 で直接構築していた。修正後は compiler_memory_place.rs が TypeCtx の compiler memory identity、CompilerMemoryFieldSpecaggregate_fields_with_offsets の typed layout をまとめて消費し、field projection を生成する。RegionToken.raw から RegionToken.size への sibling 変換も shared field spec から projection を導出するため、Resource IR の raw cell tracking / owner extent 比較は古い layout 仮定に依存しない。

ISS-20260516T090208743Z-RESOURCE-IR-CONSTRUCT-MEMORY-TYPE-CH-B8053A9C は 2026-05-16 に修正した。前項の TypeCtx identity registry 導入後も、Resource IR construct path では lower_raw_address_return.rsowner_flow.rs が constructor 名から MemPtr / RegionToken を再分類していた。修正後は transparent return projection が type_is_raw_pointer(env.types, expr.ty) を使い、owner-token construct extent handling も type_is_owner_token(self.types, output.ty) を使う。source capability 側の constructor 名分類は authority evidence を見つける入口に限定し、Resource IR の semantic proof は型検査済み TypeCtx identity に一本化した。同名 user struct RegionToken に owner-token construct extent check が掛からない regression と、Resource IR 側で compiler_memory_type_from_constructor_name を使わない source policy を追加した。

ISS-20260517T075612588Z-RAW-ADDRESS-RETURN-PROOF-DUPLICATES--E5A6AE6F では、transparent raw-address return proof に残っていた field accessor / raw field spelling の local 判定を削除した。修正前の lower_raw_address_return.rsget / get_fieldraw を直接比較していたため、FieldAccessorKindCompilerMemoryFieldSpec へ集約した proof domain から外れていた。修正後は source member と intrinsic spelling の両方を FieldAccessorKind::from_call_base_name で分類し、raw field は CompilerMemoryFieldSpec::RawI32.name() から導出する。これにより raw-address return propagation も field accessor / compiler memory field contract の shared enum を消費する。

2026-05-18 の ISS-20260517T175341624Z-TRANSPARENT-RAW-ADDRESS-RETURN-PROOF-52AEEF7B で、この transparent raw-address return proof についても ordinary call と intrinsic evidence を分離した。FieldAccessorKind::from_call_base_name は intrinsic spelling と source member spelling を Resource IR consumer 側で再結合してしまうため削除した。修正後は RawAddressReturnCalleeEvidence::{OrdinaryCall, Intrinsic}match し、field projection proof は Intrinsic branch で FieldAccessorKind::from_intrinsic_name を読む場合だけ成立する。通常の user function get / get_ref は raw-address return summary の field projection evidence にならない。

ISS-20260517T080107274Z-RESOURCE-LOWER-DIRECT-CALL-RECURSION-F0DB469F では、Resource IR lowering の direct call recursion gate に残っていた field accessor spelling の列挙も同じ FieldAccessorKind::from_call_base_name へ接続した。get / get_ref / get_field / get_field_ref を lowering 側で直接列挙すると、field accessor の shared classifier と異なる保守単位になり、recursive lowering の対象だけが古いまま残る。修正後は Get / GetRef を enum match で扱い、Put は再帰対象外として網羅的に分岐する。

ただし、2026-05-18 の ISS-20260517T173445922Z-RESOURCE-IR-FIELD-PROJECTION-PROOF-A-7ABBA4D1 で、この方針のうち ordinary direct call を Resource IR 側で field accessor として再分類する部分は設計として破棄した。FieldAccessorKind で spelling を一元化しても、FuncRef::User("get", ...) のような通常関数名を Resource IR が projection proof として消費すると、typecheck が field accessor として証明した HIR / intrinsic と区別できない。修正後の Resource IR は ordinary direct call を常に call として lower し、field projection は get_field / get_field_ref intrinsic など、typecheck が生成した typed evidence だけから構築する。direct call recursion gate も callee spelling を見ず、ordinary call tree として扱う。

ISS-20260517T080907212Z-TYPECHECK-VERBOSE-LOGGING-STILL-USES-A2497472 では、静的検査の verbose trace に残っていた古い個別 symbol filter を削除した。修正前は call_reduction.rs / prefix_check.rs / constructor_apply.rs / driver.rs / function_apply.rs / function_check.rsResultnewpartitionDefaultHash32、一部 test helper 名などを直接比較し、その名前に一致する場合だけ詳細ログを出していた。これは静的証明そのものではないが、調査経路が特定 stdlib/test 名へ偏り、checker の誤りを一般入力で見つけにくくする設計だった。修正後は verbose trace を処理段階と型・stack 状態から汎用的に出力し、名前で絞らない。再発防止として source policy が stale name filter を拒否する。あわせて shared primitive の増加で肥大化していた resource_primitives.rscompiler_memorymemory_helper の submodule に分割し、compiler memory field contract と memory helper registry の責務境界を明示した。

ISS-20260517T082244329Z-RESOURCE-IR-REGION-PTR-AT-LOWERING-H-F552468A では、region_ptr_at lowering に残っていた Result success payload projection の direct "Ok" spelling を typed enum へ移した。region_ptr_atResult<MemPtr<T>, E> の成功 payload 上に raw address view を伝播する必要があるが、修正前は lower_raw_address.rs の個別 branch が "Ok" を直接 enum_payload_typePlaceProjection::EnumPayload に渡していた。修正後は resource/result_variant.rsResultVariant::Ok が success variant spelling と payload projection construction を所有し、lowering は ResultVariant::Ok.payload_place を消費する。これにより Result payload contract も Resource IR consumer に散らばる文字列ではなく、enum / match で監査できる小さな typed domain になった。

ISS-20260517T083417129Z-SHADOW-WARNINGS-DEPEND-ON-HARDCODED--58058C13 では、shadow warning に残っていた print / add / map / len などの hardcoded important stdlib symbol allowlist を削除した。修正前は core typecheck、nepl-language、nepl-web がそれぞれ独自の allowlist を持ち、実際に outer definition が存在しない名前にも「重要な stdlib 名を隠すかもしれない」という警告を出し得た。これは source code から性質を証明する設計ではなく、stdlib 名の列挙漏れや consumer 間 drift を生む。修正後は core 側の Env::lookup_outer_defined と editor analysis 側の existing outer definition list だけを警告根拠にし、diagnostic も ShadowOuterDefinition / resolve.shadow.outer_definition へ改名した。noshadow は引き続き source-level の強い禁止規則であり、通常の shadow warning は「実際の外側束縛が隠される」という fact に限定する。

ISS-20260516T092004954Z-TYPECHECK-COMPILER-MEMORY-TYPE-REGIS-86C93B83 は 2026-05-16 に修正した。TypeCtx::mark_compiler_memory_type の登録条件を SourceMap の file capability と struct 名だけにせず、現在 typecheck 中の StructDef の typed shape も同時に要求するようにした。MemPtr は public 1 type param + raw:i32RegionToken は public 1 type param + raw:i32,size:i32 の形だけを compiler memory identity として登録する。これにより stale / injected SourceCapabilities だけでは同名の malformed user struct を raw pointer / owner token として扱えず、source proof と typecheck registration と Resource IR semantic proof の接続が file-level 状態に依存しない。

ISS-20260516T094111889Z-TYPECHECK-FIELD-ACCESS-USES-STRUCT-P-44D67554 は 2026-05-16 に修正した。前項までで compiler memory type identity は TypeCtx へ証明済み登録され、Resource IR はその identity を読むようになったが、typecheck の field access restriction だけは StructConstructorPolicy と struct name map から MemPtr / RegionToken を分類していた。修正後は field_access.rsresource_primitives::compiler_memory_type_of_type を通して TypeCtx の証明済み identity を読み、CompilerMemoryType から RestrictedStructConstructor へ enum match で変換する。さらに restricted compiler memory type の base field access は、field name の存在確認より先に boundary gate を通す。これにより get token "ptr" のような不正 field 名でも generic struct has no field ではなく type.owner_token.field_access_restricted が先に出るため、compiler memory type の内部 field 構造を通常 source へ漏らさず、field access 側も Resource IR と同じ source/type proof boundary に揃う。

ISS-20260516T095206737Z-OWNER-BACKED-AGGREGATE-ROOT-STILL-US-13A94EB8 は 2026-05-16 に修正した。owner-backed aggregate の fixed-point 判定は nested Vec / HashMapStorage / wrapper aggregate を field 型から導くが、その根になる direct owner token 判定だけは StructConstructorPolicy::RawMemoryBoundaryOnly(OwnerToken) に依存していた。修正後は copy_capability.rstarget_is_compiler_owner_tokenresource_primitives::type_is_owner_token を通して TypeCtx の証明済み owner-token identity を読む。StructConstructorPolicy は aggregate constructor policy の伝播結果としてだけ使い、compiler owner token の semantic root には使わない。これにより owner-backed aggregate constructor / field projection gate も、Resource IR / field access と同じ TypeCtx identity proof に揃う。

ISS-20260516T103203631Z-OWNER-AGGREGATE-PROOF-MISSES-NESTED--F0DD4C3F は 2026-05-16 に修正した。SourceCapability の nested constructor evidence は explicit type args 付き constructor だけを拾っていたため、AdjacencyMatrix のような非 generic owner-backed aggregate を Result::Ok / ok payload として構築する compiler-owned stdlib source が OwnerAggregateConstructorBoundary("AdjacencyMatrix") を証明できなかった。修正後は constructor_position.rs が payload を持つ identifier を type args の有無に関係なく observer へ渡し、constructor-like 判定、shadowing、qualified enum variant 除外、same-module enum variant 除外、user source rejection は owner_aggregate/evidence.rs に残した。これは stdlib module 名の allowlist ではなく、汎用 prefix 構文上の nested constructor evidence を source proof に加える修正である。focused adjacency_matrix doctest は owner aggregate constructor restriction を越え、次の direct RegionToken field projection capability issue を ISS-20260516T103911431Z-OWNER-TOKEN-FIELD-PROJECTION-IGNORES-A0BA1412 として分離した。

ISS-20260516T103911431Z-OWNER-TOKEN-FIELD-PROJECTION-IGNORES-A0BA1412 は 2026-05-16 に修正した。direct RegionToken.raw / RegionToken.size projection は compiler-owned memory boundary helper の内部で必要だが、typecheck の OwnerToken base branch は OwnerAggregateFieldBoundary source evidence を見ず、owner token 定義 file capability だけを要求していた。修正後は direct owner token field projection でも OwnerAggregateFieldBoundary を許可する。ただし RawPointer field projection は raw structural / compiler memory definition boundary のままとし、owner field source proof では許可しない。user source は source capability を持たないため、#import "core/field" だけで owner token 内部 field を覗くことは引き続き拒否される。stdlib/core/mem/pointer/region.nepl focused doctest は通過し、adjacency_matrix/api/create.nepl は compiler boundary 系の error を越えて stale eq doctest issue に到達した。

ISS-20260516T105520905Z-RAW-HELPER-WRAPPER-NAMES-SHADOW-THEI-4B3F64AC は 2026-05-17 に修正した。core/mem/pointer/scalar.neplload_u8 / store_u8core/mem/pointer/bulk.neplmem_copy は、compiler-owned wrapper 名と raw primitive 名が同じであるため、unified source capability walker が module top-level callable を shadow として登録した時点で自分自身の raw primitive call-head evidence を失っていた。修正後は SourceCapabilityScopeTopLevelCallableLocalValue を enum で区別し、raw_evidence_gate.rs が「現在走査中の関数名と一致する top-level callable で、かつ中央 raw helper registry に存在する symbol」だけを raw evidence として許可する。parameter / local / match bind / unrelated qualifier shadow は引き続き evidence にならない。これは module allowlist や helper 個別特例ではなく、source scope と current function frame と central raw operation enum registry から同名 wrapper の証明だけを復元する修正である。

ISS-20260516T234310403Z-SOURCE-CAPABILITY-PROOF-MISSES-RAW-C-489C7267 は 2026-05-17 に修正した。同名 wrapper shadow を解消した後も、Option<i32>::Some load_u8 raw のように raw primitive call が constructor payload の先頭に出る形を shared source capability walker が見落としていた。修正後は prefix expression の先頭や let / type annotation 後だけでなく、後続 payload を持つ identifier も payload-leading nested call evidence として observer へ渡す。raw evidence として採用するかどうかは従来どおり source scope shadow、current function frame、central raw helper registry の typed gate で判定するため、consume load_i32 のような payload のない値参照は引き続き capability にならない。これにより constructor / result wrapper の中で raw operation を返す stdlib 実装を、stdlib path allowlist ではなく prefix source 構文の nested call 証拠として扱える。

ISS-20260517T000913110Z-SOURCE-CAPABILITY-RAW-PROOF-TREATS-I-23B11FA9 は 2026-05-17 に修正した。unified source proof の scope は top-level function / alias と local value を区別していたが、impl method 名を分類していなかったため、impl i32: fn load_i32 のような method 名が raw helper 名と一致した場合に raw operation evidence として過大付与され得た。修正後は binding kind を TopLevelCallable / ImplMethod / LocalValue の enum に分け、raw helper self-proof は TopLevelCallable かつ現在の top-level function frame と一致し、さらに中央 raw helper registry に存在する場合だけ許可する。ImplMethod は source spelling としては shadow だが raw helper wrapper 証明にはならない。これは個別 module allowlist ではなく、source scope と callable kind を明示する汎用 proof の強化である。

ISS-20260517T004939361Z-SOURCE-CAPABILITY-PROOF-IS-STILL-CON-C609583C は 2026-05-17 に修正した。現行 main は SourceCapabilityObserverSourceCapabilityProofCollector により source capability の traversal / evidence collection を単一 proof lifecycle へ統合済みであり、domain 別 proof walker や stdlib module allowlist へ戻ってはいない。一方で修正前は proof の消費が SourceCapabilities の file-level enum set であり、compiler.rs / typecheck/effect_check.rs / Resource effect gate は raw operation や checked MemPtr diagnostic を span.file_id と operation だけで抑制していた。修正後は SourceCapabilityUseSite / SourceCapabilitySpan を導入し、raw operation / raw body / raw address view / owner aggregate constructor / owner aggregate field / compiler memory type definition / compiler memory field projection の各 use site を typed proof artifact として query する。*_allowed_at query は旧 file-level capability へ fallback しないため、「ある stdlib file のどこかに evidence があるため同 file 内の別 use も通る」という粗さを閉じた。MemPtr.raw のような raw pointer field projection は owner aggregate field proof とは別に CompilerMemoryFieldBoundary を要求し、source policy は production gate が exact query を使い続けることと fallback 再導入禁止を監視する。

ISS-20260517T093306644Z-SOURCE-CAPABILITY-PROOF-COLLECTOR-DI-429F5FD2ISS-20260517T094754743Z-SOURCE-CAPABILITY-PROOF-BUILDER-EXPO-C06F3A22 は同じ 2026-05-17 に修正した。前者では source capability collector の observer callback を SourceCapabilityProofEvent と dispatcher に集約し、どの source event にどの proof rule を適用するかを typed event の match で監査できる形にした。後者では SourceCapabilityProofinsert_raw_* / insert_owner_* / insert_compiler_* のような domain 別 insert API を廃止し、raw memory、raw body、owner aggregate、compiler memory field、compiler memory type definition をすべて SourceCapabilityProofFact enum と insert_fact の exhaustive match から SourceCapabilityUseSite へ写像する。top-level raw helper call propagation も SourceCapabilities を直接書き換えず、同じ fact insertion path を使う。これにより proof traversal、proof rule dispatch、proof fact consumption が「個別 module ごとの許可関数」ではなく、source-derived typed fact pipeline としてつながり、静的検査の実装自体も enum / match / source policy で drift を検出しやすくなった。

ISS-20260517T090028643Z-COMPILER-MEMORY-FIELD-PROOF-IS-GRANT-4EB3DABF は同じ 2026-05-17 に修正した。exact use-site proof の導入後も、OwnerAggregateCapabilityEvidence::FieldAccessor から OwnerAggregateFieldBoundaryCompilerMemoryFieldBoundary の両方を同時に挿入していたため、compiler-owned stdlib source の普通の core/field projection が MemPtr 表現 field authority まで得られる余地があった。修正後は CompilerMemoryField enum を導入し、compiler memory field proof は raw / size の selector を持つ get / get_ref use site からだけ発行する。typecheck 側もこの proof を direct MemPtr.raw / RegionToken.raw / RegionToken.size など base が compiler memory type 自身である場合に限定して消費し、PtrHolder.ptr のような aggregate payload が MemPtr<T> であるだけの projection には使わない。これにより owner aggregate field operation と compiler memory representation access の証明 domain が分離され、静的検査のプログラム自体も CompilerMemoryFieldEvidence / SourceCapabilityUseSite::CompilerMemoryFieldBoundary { field, span } の enum/match で監査できる。

ISS-20260517T012833283Z-SOURCECAPABILITIES-STILL-CARRIES-BRO-5588739B は 2026-05-17 に修正した。上記の exact use-site proof 導入後も、SourceCapabilities には旧 SourceCapability enum、file-level BTreeSet<SourceCapability>raw_memory_boundary()with(SourceCapability) などの broad constructor が残り、test harness や ResourceIR fixture が entry source へ手動 authority を注入できた。修正後は SourceCapabilitiesSourceCapabilityUseSite の集合に限定し、aggregate observation helper も use-site evidence からだけ導出する。raw helper 間の呼び出しは file-level fallback ではなく、直接 raw evidence を持つ top-level helper を起点にした top_level_raw_calls の証明伝播で exact call-site proof へ変換する。これにより Stage 6 の source capability は「file が compiler-owned だから許す」経路を閉じ、source code から導出された typed proof artifact だけを compiler gate が消費する。ただし当時は raw identity escape に return-span 内探索の補助 query が残っており、これは後続の ISS-20260517T022637369Z-RAW-IDENTITY-ESCAPE-SUPPRESSION-USES-0DD1EDAA で origin span proof へ置き換えた。

ISS-20260517T021245721Z-SOURCEMAP-STILL-EXPOSES-FILE-LEVEL-S-D2E7D025ISS-20260517T022637369Z-RAW-IDENTITY-ESCAPE-SUPPRESSION-USES-0DD1EDAA は 2026-05-17 に続けて修正した。前者では SourceMap / SourceCapabilities から file-level aggregate query を削除したが、その時点では raw identity escape diagnostic が return expression 全体の span しか持たないため、*_allowed_within という広い span-contained query が残っていた。後者の修正で RawIdentityTable / RawMemoryIdentityTable / function return summary が RawIdentityOrigin { operation, span } を保持し、RawAddressEscapeFromInternalAlloc diagnostic も raw identity を作った origin span を持つようにした。compiler gate は return span 内を探索せず、origin span の exact source capability だけを照合する。これにより、同じ return expression 内に別の alloc_raw / realloc_raw evidence があるだけで unrelated raw identity escape が抑制される経路を閉じ、source proof artifact と Resource IR fact が一対一に接続された。

ISS-20260517T024243699Z-SOURCEMAP-EXPOSES-FILE-LEVEL-SOURCEC-AEFA0421 は同じ 2026-05-17 に修正した。exact use-site proof の production gate は *_allowed_at(span, ...) に移っていたが、SourceMap::capabilities(file_id)pub のままだったため、crate 外の integration test や将来の compiler consumer が file-level SourceCapabilities を直接取り出せる状態だった。修正後はこの accessor を crate-internal に閉じ、外部テストも SourceMap の exact span query だけを使う。source policy は pub fn capabilities( の再導入を拒否するため、SourceMap が file-level authority export へ戻ると nodesrc/test_static_check_boundary_responsibility.js が失敗する。

ISS-20260517T025208836Z-RESOURCE-IR-RAW-ADDRESS-HELPER-PROOF-DAB3E3C8 は同じ 2026-05-17 に修正した。mem_ptr_wrap / mem_ptr_add / region_new / region_ptr / region_ptr_at / region_token_raw_ref は Resource IR 上で raw-address alias/view fact を作る dedicated helper だが、修正前は dedicated lowering 後に generic named raw-address proof も実行され、同じ call-site の証明 authority が二重化していた。修正後は MemoryHelperPrimitive::has_resource_call_lowering を中央 enum registry とし、push_core_mem_wrapper_semantics が call を処理したかを bool で返す。lower.rs は dedicated lowering が成立した call では generic named proof を走らせず、transparent return projection 側の dedicated classifier も同じ registry を読む。これにより個別 helper ごとの偶然の重複 proof ではなく、typed enum role と match の網羅性で Resource IR raw-address proof の入口を監査できる。

ISS-20260518T052853094Z-USER-SOURCE-CAN-FORGE-RAW-MEMPTR-THR-109B2F18 は 2026-05-18 に修正した。前項で raw-address helper の lowering entry は整理されたが、core/mem/internal を ordinary source が direct import できる場合、mem_ptr_wrapRawAddressAlias を作り、mem_ptr_addr は raw address view を観測できるにもかかわらず、effect gate は raw memory operation と一部 offset view だけを境界診断にしていた。修正後は RawAddressAliasKindRawAddressViewKind::InternalHelper を Resource IR に追加し、internal helper 由来の alias/view を exact use-site source proof がある compiler-owned source でだけ許可する。region_ptr / region_ptr_at は checked public NonOwningProjection のままなので、safe projection は維持しつつ raw pointer identity の偽造・観測入口だけを閉じる。source capability proof も RawAddressAliasBoundaryRawAddressViewBoundary を別 fact として保持し、stdlib module 名の allowlist ではなく source text と compiler-owned provenance から境界 authority を証明する。

ISS-20260518T195527913Z-VEC-DOCTEST-RAW-ADDRESS-OBSERVATI-6CAB0F41 は 2026-05-18 に修正した。stdlib/tests/vec.n.mdVec.data_mem_ptr の usage doctest は、通常の Vec public behavior を確認するために core/mem/internalmem_ptr_addr data_mem_ptr を使って raw backing address の正値性を検証していた。これは compiler の raw boundary proof を直接壊す実装ではないが、Stage 6 の MemPtr = non-owning pointer view という説明を fixture が弱め、raw address observer を通常の使用例に見せてしまう。修正後は with_capacity / is_empty / typed MemPtr observer / free で検証し、raw address positivity check は削除した。policy は同じ raw observer fixture の再導入を拒否する。

ISS-20260518T200613054Z-BYTEBUF-DOCTEST-IMPORTS-RAW-INTERNAL-387EC456 は 2026-05-18 に修正した。io_bytebuf_from_owned_ptr の removed-helper compile-fail doctest は、helper が未定義であることを確認するだけの fixture であるにもかかわらず、core/mem/internalmem_ptr_wrap で raw MemPtr を作っていた。修正後は alloc/io だけを import し、削除済み helper が解決できないことを直接確認する。policy は同 fixture に raw memory module import や mem_ptr_wrap が戻らないことを監視する。これにより ByteBuf owner boundary regression は raw pointer fixture privilege ではなく、public API surface と source proof discipline の上で監視される。

ISS-20260517T044649993Z-RAW-BODY-DIRECT-CALLEE-PROOF-IS-RECL-FF4BD50E は同じ 2026-05-17 に修正した。raw body 内の call は以前、raw_body_direct_callees が callee 文字列として返し、source capability proof と typecheck effect gate がそれぞれ raw_memory_op_from_name(&callee) で raw memory helper かどうかを再分類していた。修正後は effects.rsRawBodyDirectCallee::RawMemory { callee, operation } / Other(callee) を生成し、consumer は enum を match して消費する。これにより raw body direct call の raw operation proof は parser 側の typed artifact になり、consumer ごとの string classifier drift や後発の個別特例追加を source policy で検出できる。

ISS-20260517T045756082Z-RAW-BODY-BACKEND-INTRINSIC-PURITY-IS-C82FFD7B も同じ 2026-05-17 に修正した。前項で raw body direct callee を typed 化した後も、typecheck/effect_check.rs だけは callee.starts_with("llvm.") により LLVM backend intrinsic を pure と扱う consumer 側文字列特例を残していた。修正後は effects.rsRawBodyBackendRawBodyDirectCallee::BackendIntrinsic { callee, backend } を生成し、typecheck は enum branch を match するだけにした。これにより raw body memory op / raw helper / backend intrinsic / ordinary callee の分類 authority が raw body parser 側に集まり、typecheck gate は typed artifact の消費に専念する。

ISS-20260517T050529675Z-FIELD-ACCESSOR-INTRINSIC-DETECTION-D-D864665B も同じ 2026-05-17 に修正した。FieldAccessorKindGet / GetRef / Put の typed domain を持っていたが、detect_field_accessor_fnget_field / get_field_ref / set_field の spelling を binding_rules.rs に直接持っていた。修正後は FieldAccessorKind::from_intrinsic_name / intrinsic_name が spelling 対応を所有し、wrapper 検出と field accessor HIR 生成は enum classifier を読む。これにより field accessor wrapper と owner aggregate field boundary の入口が、分散した string match ではなく typed enum domain に寄った。

ISS-20260517T051256916Z-PREFIX-INTRINSIC-FIELD-ACCESS-STILL--AB3AD18A も同じ 2026-05-17 に修正した。前項で field accessor spelling の所有者を FieldAccessorKind に寄せた後も、prefix intrinsic checker は result type 決定と get_field / get_field_ref / set_field lowering で direct string branch を持っていた。修正後は prefix_check.rsFieldAccessorKind::from_intrinsic_name を 1 回だけ計算し、Get / GetRef / Putmatch で網羅する。source policy も prefix_check.rs の direct branch spelling 再導入を拒否するため、field accessor intrinsic の compiler entry は wrapper 検出と prefix intrinsic check の両方で同じ typed enum domain を消費する。

ISS-20260517T052246957Z-FIELD-ACCESSOR-INTRINSIC-ARITY-CAN-P-CA712F19 も同じ 2026-05-17 に修正した。field accessor intrinsic の分類を FieldAccessorKind に寄せた後も、必要引数数は enum domain の契約になっておらず、set_field の引数不足などで prefix_check.rsargs[2] を参照して compiler panic し得た。修正後は FieldAccessorKind::argument_count()Get / GetRef / Put の arity を match で返し、prefix checker は lowering の前に args.len() を検査する。不一致時は type.intrinsic.arg_arity_mismatch diagnostic を発行して generic intrinsic expression recovery へ進むため、malformed source は静的検査の structured error として扱われ、checker 自体の indexing bug は model unit test / source policy / integration regression で監視される。

ISS-20260517T100117040Z-TYPECHECK-CONTROL-SPECIAL-FUNCTIONS--D04B8CA1 も同じ 2026-05-17 に修正した。if / while は source keyword として parser から Symbol::If / Symbol::While へ入るが、typecheck 内では prefix_check.rs"if" / "while"HirExprKind::Var を組み立て、control_apply.rs が同じ文字列を direct guard で再判定していた。修正後は ControlSpecialFunction enum が typecheck 内の control special spelling と from_name classifier を所有し、prefix lowering は enum の canonical name を使い、control application は ControlSpecialFunctionmatch で dispatch する。これにより control-flow 型検査の special form 追加・変更時に match 網羅性と source policy が drift を検出しやすくなった。

ISS-20260517T102052427Z-TYPECHECK-UNIT-LIKE-STRUCT-SHAPE-IS--F13DA6CD も同じ 2026-05-17 に修正した。unit-like struct の tag <()> shape は constructor 関数登録時の arity と constructor 適用時の HIR field 補完の両方に関わるが、driver.rsconstructor_apply.rs がそれぞれ f_names[0] == "tag" / field_names[0] == "tag" を持っていた。修正後は StructConstructorShape::{UnitLikeTag, FieldList} が shape を一度分類し、StructInfo::constructor_shape として保持する。driver は constructor params / arity をこの shape から導出し、constructor application は同じ shape fact を match して unit field を補完する。これにより constructor signature と lowering の drift を Rust の型と source policy で監視しやすくなった。

ISS-20260517T104130208Z-SOURCE-CAPABILITY-CORE-FIELD-IMPORT--DAE2B054 も同じ 2026-05-17 に修正した。owner aggregate field accessor proof は core/field import を source evidence として扱うが、owner_aggregate/field_imports.rs.nepl だけを strip して "core/field" と比較していた。修正後は SourceCapabilityImportModule::{CoreField} が proof-relevant import module domain を所有し、from_path が slash、. / ...nepl / .n.md を正規化する。field import evidence はこの enum classifier を消費するだけになり、import path 形式の増減を source policy と unit test で監視できる。

ISS-20260517T105019127Z-BACKEND-NAMED-SCALAR-TYPES-ARE-DUPLI-830FA07E も同じ 2026-05-17 に修正した。i64 / u64 / f64 は parser / TypeCtx では named type として流れる一方、layout、WASM signature、WASM local lowering、LLVM type map、scalar intrinsic type lookup がそれぞれ独自に文字列分岐していた。修正後は BackendScalarType::{U32, I64, U64, F64} が backend-relevant named scalar の spelling、TypeCtx 登録、storage size / align、WASM / LLVM type category を所有し、各 consumer はこの enum domain を消費する。これにより u64 のような scalar が型検査では named type、backend では i64、layout では 8 byte という複数面を持つ場合でも、分類の drift を Rust の match と source policy で検出できる。

ISS-20260517T111300558Z-SCALAR-INTRINSIC-BACKEND-LOWERING-DU-DEB6C1B2 も同じ 2026-05-17 に修正した。前段で prefix_check.rs の scalar intrinsic signature は ScalarIntrinsicKind に集約していたが、その enum は typecheck module 内に閉じていたため、WASM/LLVM lowering と codegen precheck は i32_to_f32 / reinterpret_i32_f32 / i64_to_u64 などの spelling と backend 表現を再び文字列分岐していた。修正後は ScalarIntrinsicKind / ScalarIntrinsicType を crate-level intrinsic_kinds.rs に移し、同じ enum が spelling、arity、input/output type、ScalarIntrinsicBackendOp を所有する。typecheck は result type / argument validation をこの enum から読み、WASM/LLVM は backend_op() の exhaustive match で lower し、precheck も ScalarIntrinsicKind::from_intrinsic_name を使う。これにより「型検査では認めたが backend support list では認めない」「LLVM/WASM で scalar intrinsic 名だけが drift する」という不整合を source policy と Rust の match 網羅性で検出できる。

ISS-20260517T061045507Z-RESOURCE-FIELD-ACCESSOR-INTRINSIC-PR-9951F2BE も同じ 2026-05-17 に修正した。typecheck 側では field accessor intrinsic spelling と arity を FieldAccessorKind に集約していたが、Resource IR の aggregate projection coverage / lowering は get_field / get_field_refhelper_base_name の direct string branch で再分類していた。修正後は FieldAccessorKind を crate-level intrinsic_kinds.rs へ移し、typecheck と Resource IR の両方が同じ enum domain を消費する。これにより typed HIR construction と Resource IR proof の field accessor contract が drift しない。

ISS-20260517T071123948Z-CORE-FIELD-SOURCE-ACCESSOR-SPELLING--C753D74B も同じ 2026-05-17 に修正した。前項で field accessor intrinsic は FieldAccessorKind に集約したが、source-level core/field member 名は Resource IR coverage / lowering の get / get_ref direct branch と、owner aggregate source proof の private CoreFieldAccessorMember に分散していた。修正後は FieldAccessorKind::from_core_field_member_name / core_field_member_nameget / get_ref / put の source spelling を所有し、Resource IR と owner aggregate field import proof は同じ enum classifier を消費する。これにより source import proof、typecheck/HIR field accessor、Resource IR aggregate projection が field accessor operation の 1 つの typed domain に揃う。

ISS-20260517T173445922Z-RESOURCE-IR-FIELD-PROJECTION-PROOF-A-7ABBA4D1 の修正後、この段落のうち Resource IR が source-level core/field member 名を直接消費する設計は取り消す。from_core_field_member_name は owner aggregate source proof の import/member evidence を型付き domain に載せるために残すが、Resource IR coverage / lowering は source member spelling を見ない。source proof は typecheck の field accessor lowering へ authority を渡し、Resource IR はその結果として現れる intrinsic / typed HIR evidence だけを読む。この分離により、stdlib 名や ordinary user function 名の列挙ではなく、source proof -> typecheck HIR -> Resource IR semantic proof の段階ごとに証拠の責務を固定する。

ISS-20260517T180734291Z-RESOURCE-CHECKER-SOURCE-POLICY-STILL-8BAE7A40 では、上記の設計変更後に残っていた source policy drift を修正した。nodesrc/test_resource_checker_responsibility.jsFieldAccessorKind::from_call_base_name の存在を要求しない。代わりに、ordinary call が field accessor proof にならないこと、transparent raw-address return proof が RawAddressReturnCalleeEvidence::{OrdinaryCall, Intrinsic} を通じて typed evidence を分けること、lower.rs の regression tests が lower_tests.rs に分離され責務分割上限に入ることを監視する。これは proof 実装だけでなく、proof を監視する source policy 自体も古い unsafe な設計へ戻らないための Stage 6 完了条件である。

ISS-20260517T182739351Z-RESOURCE-IR-REJECTS-INITIALIZED-NEST-1388C7B5 では、Stage 4 initialized cell proof の storage-view projection を修正した。load<T> で得た Copy aggregate を local に束縛した後、item.span.file_id のような入れ子 field access が Local("item") + StorageOffset(known) + Deref + Field(...) として Resource IR に現れ、whole-value initialized fact から raw-cell view へ証明が流れず resource.cell.uninit になっていた。修正後は、known offset が TypeCtx の aggregate layout 上の field と一致し、残りの projection を適用した最終 query type が Copy の場合だけ initialized fact を流す。unknown / symbolic offset、追加 deref、non-Copy query は引き続き拒否するため、raw memory の自由な読み出しを許可するのではなく、compiler が生成した typed field-storage view のうち move/drop state を壊さない Copy leaf 読み出しだけを証明対象にする。

ISS-20260517T062207552Z-RESOURCE-SCALAR-PRIMITIVE-PROOFS-DUP-30D2A64C も同じ 2026-05-17 に修正した。Resource IR の reference address projection、raw address offset propagation、i32 constant / scale / difference fact、condition fact lowering は、それぞれ add / sub / mul / lt などを独自に文字列分類していた。修正後は resource/scalar_primitive.rsI32ArithmeticPrimitive / I32ComparisonPrimitive / BooleanPrimitive が scalar primitive domain を所有し、Resource IR consumer はこの enum を match して proof を構築する。これにより source/type/IR から導出した scalar fact の分類が 1 箇所に集まり、個別 consumer ごとの spelling drift を source policy で検出できる。

ISS-20260517T053109277Z-SCALAR-INTRINSIC-SIGNATURES-STILL-US-9E38B5AF も同じ 2026-05-17 に修正した。prefix_check.rs は scalar / cast / string intrinsic の result type を 1 つ目の string if-chain で決め、argument validation を 2 つ目の string if-chain で行っていたため、同じ intrinsic spelling と signature fact が重複していた。修正後は ScalarIntrinsicKind が intrinsic name、arity、input type、output type を所有し、ScalarIntrinsicType を介して TypeCtx の concrete type へ変換する。prefix checker は分類を 1 回だけ行い、result type と argument validation の両方で同じ enum-owned signature を消費するため、今後 scalar intrinsic を追加・変更すると match 網羅性と source policy で drift を検出できる。

ISS-20260517T060320513Z-PREFIX-CORE-INTRINSIC-RESULT-TYPING--0B7AACB4 も同じ 2026-05-17 に修正した。size_of / align_of / load / store / callsite_span / unreachable は scalar / field accessor と同じ prefix intrinsic entry なのに、result type だけが intrin.name の direct string branch に残っていた。修正後は CoreIntrinsicKind が spelling と CoreIntrinsicResultKind を所有し、prefix checker は core_intrinsic_type_id の exhaustive match で result type と callsite_span type arg diagnostic を導出する。これにより prefix intrinsic の主要分類は scalar、field accessor、core の typed enum domain に分かれ、checker 自体の分岐 drift を source policy で検出できる。

ISS-20260517T064500300Z-RESOURCE-LAYOUT-INTRINSIC-PROOFS-DUP-81984703 も同じ 2026-05-17 に修正した。前項で CoreIntrinsicKind は typecheck の result typing に入ったが、Resource IR の layout constant proof は lower_layout_intrinsic.rs と raw address offset evaluator で size_of / align_of を直接文字列分類していた。修正後は CoreIntrinsicKind / CoreIntrinsicResultKind を crate-level intrinsic_kinds.rs へ移し、CoreIntrinsicKind::layout_i32_valueSizeOf / AlignOf の値 semantics を所有する。Resource IR lowering と raw address return/argument offset proof はこの shared enum を消費するため、layout intrinsic の spelling、result type、Resource IR scalar fact が 1 つの typed domain に接続される。

ISS-20260517T070337891Z-OWNER-AGGREGATE-INTRINSIC-EVIDENCE-D-4A69BCFB も同じ 2026-05-17 に修正した。FieldAccessorKind を crate-level shared intrinsic domain に移した後も、owner aggregate source proof の intrinsic evidence だけが get_field / get_field_ref を直接文字列分岐していた。修正後は owner_aggregate_intrinsic_evidenceFieldAccessorKind::from_intrinsic_name を消費し、Get / GetRef / Putmatch で網羅する。owner aggregate field boundary evidence になるのは読み取り系の Get / GetRef だけで、Put は既存の source field import proof 経路と同じく別扱いのまま拒否する。source policy は source_capability/owner_aggregate/evidence.rs に direct intrinsic spelling が戻ることを拒否するため、typecheck、Resource IR、source capability proof の field accessor contract が同じ enum domain に揃う。

ISS-20260517T053938813Z-RAW-MEMORY-INTRINSIC-EFFECT-STILL-US-63EAEAFB も同じ 2026-05-17 に修正した。effects.rs#intrinsic "load" / "store" の raw memory effect を RAW_MEMORY_INTRINSIC_EFFECT_MARKERS string list で判定し、typecheck はその marker と raw_memory_op_from_name の再分類を組み合わせていた。修正後は raw_memory_intrinsic_op_from_name が intrinsic name から直接 RawMemoryOp::Load / RawMemoryOp::Store を返し、intrinsic_is_raw_memory_effect と pure-context allow gate は typed operation classifier だけを消費する。これにより raw memory intrinsic effect と Resource/Source capability gate の操作単位が RawMemoryOp に揃い、marker list と enum mapping の drift を source policy で防ぐ。

ISS-20260518T112010000Z-RESOURCE-LOWERING-RAW-MEMORY-INTRINS-A25124A3 は 2026-05-18 に修正した。前項の修正後も Resource IR lowering の lower_raw_memory.rs だけは、intrinsic_is_raw_memory_effect(name) で boolean 判定してから raw_memory_op_from_name(name) で helper-name classifier に再分類していた。これは現状の load / store では結果が一致しても、raw intrinsic classifier と raw helper classifier の二重管理を Resource IR 入力側へ残す。修正後は lowering も raw_memory_intrinsic_op_from_name(name) を直接消費し、typecheck と Resource IR が同じ typed intrinsic operation proof から分岐する。nodesrc/test_resource_checker_responsibility.jslower_raw_memory.rs への intrinsic_is_raw_memory_effect 再導入を拒否するため、checker 自体の分類 drift を source policy で検出できる。

ISS-20260518T012520895Z-COMPILER-INTRINSIC-DOCTESTS-STILL-AS-4AD0DA0D は 2026-05-18 に修正した。tests/compiler/intrinsic.n.md は raw load/store runtime を ordinary doctest source の成功例として検証していたが、Stage 6 では raw memory operation authority は compiler-owned source provenance と exact use-site source evidence からだけ得る。修正後は raw alloc_raw / load / store / dealloc_raw を直接呼ぶ doctest を compile_fail に変更し、resource.raw.memory_outside_boundary を固定した。runtime codegen coverage は nepl-core/tests/intrinsic.rsrun_main_wasi_i32_raw_memory_boundary に残すため、raw operation を許可する条件は compiler-owned source proof のまま維持される。これは checker を緩める修正ではなく、fixture 側の責務を「通常 source は raw boundary に入れない」ことの回帰テストへ合わせる Stage 6 整理である。

ISS-20260518T013143510Z-RESOURCE-IR-RAW-IDENTITY-ESCAPE-MISS-DB101F7A は 2026-05-18 に修正した。Resource IR の raw pointer return summary は、MemPtr<T> のような compiler memory pointer 型だけを summary carrier として扱い、plain i32 で表現された raw slot pointer を helper が返す場合に alias fact を落としていた。その結果、alloc_raw identity を helper から返った slot alias 経由で store/load して返す経路では、raw boundary/effect diagnostic は出ても resource.raw.identity_escape が欠落していた。修正後は type_can_carry_raw_pointer_alias_summaryTypeKind::I32、generic type variable、aggregate / reference / box 内の carrier を typed TypeKind match で扱い、summary engine が Resource IR dataflow で実際に証明した alias fact だけを direct call / indirect call の戻り値へ伝搬する。stdlib module や helper 名の列挙ではなく、型構造と Resource IR pointer alias summary による汎用証明であるため、raw slot helper、function value、generic identity helper のような経路でも同じ証明器を適用できる。

ISS-20260518T015305820Z-RESOURCE-OWNER-FLOW-RESPONSIBILITY-L-ED29F73C は 2026-05-18 に修正した。nodesrc/test_resource_checker_responsibility.js が Resource owner checker の責務再集中を検出し、owner_flow.rs の release / availability、owner return summary の root / projection apply、return projection place helper、raw pointer carrier tests がそれぞれ実装本体へ戻りつつあることが分かった。修正後は owner_release.rsowner_return_apply_projection.rsowner_return_apply_place.rsraw_pointer_type_tests.rs へ意味単位で分離し、policy line budget と mod.rs 宣言で監視する。これは checker semantics を変える修正ではなく、静的検査プログラム自体の誤配線や責務混在を source policy で検出しやすくする Stage 6 の保守性補強である。

ISS-20260518T030154409Z-SELFHOST-CLI-REPORTER-DOCTESTS-EXCEE-6D30C865 は 2026-05-18 に修正した。selfhost CLI reporter doctest timeout の根本原因は reporter 個別の stdout 処理ではなく、StringBuilder / ByteBuilder のような owner token backed aggregate を raw pointer alias summary / raw identity summary の public carrier として過展開していたことだった。これにより len / cap などの metadata i32 field まで raw carrier として探索され、append_six の最小再現で resource_effect_boundaries が 155 秒級に膨らんだ。修正後は TypeCtx の compiler-memory type proof を使い、MemPtr は non-owning raw pointer、RegionToken / structural owner carrier は free obligation owner として分ける。owner token と structural owner carrier は raw pointer alias / raw identity の public propagation から外し、bare raw i32MemPtr public return は引き続き Resource IR dataflow summary の対象にする。stdlib 名 allowlist ではなく型証明から導出する汎用条件なので、selfhost reporter 以外の owner backed builder / collection にも同じ証明器を適用できる。修正後の最小再現は elapsed_ms=6059, resource_effect_boundaries=67ms, resource_static_check=2833ms まで改善し、regression は effect_return_summary_filter_tests.rsraw_pointer_type_tests.rsnodesrc/test_resource_checker_responsibility.js で固定した。

ISS-20260517T054640694Z-IMPURE-HOST-EFFECT-MARKERS-DUPLICATE-3783BAA7 も同じ 2026-05-17 に修正した。external I/O と nondeterministic host effect は ExternalIoOp / NondetOp の typed enum と as_str match を持っていたが、テストと将来の consumer 用に IMPURE_IO_EFFECT_MARKERS という重複 string list も公開していた。修正後は旧 marker list を削除し、enum 側に ExternalIoOp::ALL / NondetOp::ALL を置く。host effect の列挙・round-trip test・source policy はすべて enum-owned domain を起点にするため、effect checker 自体の誤りを Rust の型と match で検出しやすくなる。

ISS-20260517T055606243Z-RAW-MEMORY-HELPER-EFFECT-MARKERS-DUP-617FE309 も同じ 2026-05-17 に修正した。raw memory helper effect は RAW_MEMORY_HELPER_EFFECT_MARKERS で既知名を確認し、直後の raw_memory_op_from_name で同じ spelling を RawMemoryOp へ再分類していた。修正後は RawMemoryHelper enum が runtime ABI helper と core/mem raw helper の spelling と operation mapping を所有し、raw_memory_op_from_name はその typed domain だけを読む。SourceCapability / Resource IR / effect gate は引き続き同じ classifier を共有するが、marker list と operation match の drift は source policy と round-trip test で拒否する。

ISS-20260517T185446545Z-SYNTHETIC-HIR-RAW-AND-ADDRESS-INTRIN-0E618808 は 2026-05-18 に修正した。typecheck の dotted field read / field accessor put / prefix assignment と drop insertion の enum payload drop elaboration は、HIR Intrinsic を合成する段階で "add" / "load" / "store" を直書きしていた。これにより typecheck が生成する HIR だけが CoreIntrinsicKind / I32ArithmeticPrimitive の enum domain を迂回し、Resource IR / effect checker 側の typed proof と drift し得た。修正後は arithmetic source spelling を I32ArithmeticPrimitive::base_name が所有し、raw load/store spelling は CoreIntrinsicKind::intrinsic_name から得る。source policy は合成 HIR の name: "add/load/store".to_string() 再導入を拒否するため、checker 自体の static proof drift を検出しやすくなる。

ISS-20260516T042051521Z-BTREEMAP-FOCUSED-DOCTESTS-STILL-HIDE-87F9DD7B は 2026-05-16 に修正した。BTreeMap focused doctest を stdout TestReport fixture へ移行したことで、BTreeMap helper return path の Resource IR owner summary false positive が露出した。根本原因は、owner-token-backed aggregate の i32 leaf を全て raw free obligation owner candidate として列挙していたことである。修正後は condition/value summary 用の i32 leaf と raw owner candidate leaf を分け、型構造から owner token を含む aggregate を判定する。owner-token-backed aggregate では RegionToken.raw だけを free obligation identity とし、RegionToken.sizeVec.lenVec.cap、BTreeMap metadata は条件・metadata scalar として扱う。これは BTreeMap 名や stdlib module allowlist ではなく、source capability unified proof、型形状、Resource IR summary から導出する汎用証明である。

ISS-20260516T054508246Z-RESOURCE-IR-OWNER-REGRESSION-EXACT-T-0E97FFDF は 2026-05-16 に修正した。Stage 6 の MemPtr = non-owning pointer / RegionToken = free obligation owner 分離後、Resource IR owner exact suite には古い owner refinement fixture と、compiler 側の raw provenance summary seed 不足が混在していた。根本原因は、parameter_summary_seed_places が同一 root prefix だけを seed として集め、Read で作られた tmpBorrow で作られた tmp.derefRawAddressViewtmp.deref.raw を元の parameter.deref.raw に戻せなかったことである。修正後は ParameterSeedAliaseseffect_summary_seed_walk を分け、IR op の alias から parameter projection を復元する。さらに callee identity summary が要求する arg + source_projections も caller summary seed に加えるため、region_ptr -> apply_ptr -> callback のような higher-order 経路でも stdlib 名の特例なしに source/type/IR summary から raw provenance を証明できる。

ISS-20260516T080917185Z-RESOURCE-IR-VALUE-PROJECTION-SUMMARY-FB1D14CC は 2026-05-16 に修正した。initialized_alias_flow_value_projection.rsResult 型名の関数だけを value projection summary の対象にしていたが、必要な証明は enum 名ではなく、single-block/simple-op Resource IR body が parameter 由来の raw address field を返却値 payload へ投影していることである。修正後は Result 名 gate を削除し、既存の Resource IR op walk が construct/read/match/call から alias flow を導く。custom enum MaybeBox::Ready(Boxed) でも Boxed.ptr の initialized raw cell evidence が payload bind へ伝播する regression と、type_is_result_enum / name == "Result" の再導入禁止 policy を追加したため、今後同じ個別 enum allowlist へ戻ると focused test か source policy が失敗する。

Resource checker の責務分割 policy も確認し、initialized_summary_variant_build.rs が監視対象から漏れていたため ISS-20260430T062912063Z-RESOURCE-CHECKER-RESPONSIBILITY-POLI-CC55287A で修正した。2026-05-13 には ISS-20260512T201359246Z-RESOURCE-CHECKER-RESPONSIBILITY-POLI-E382D3AB として、後続 Stage 4/5 で追加された Resource IR module も全て行数上限と宣言検査の対象へ入れた。今後 Resource IR module を分割した場合は、実装だけでなく nodesrc/test_resource_checker_responsibility.js の責務上限も同時に更新しなければ source policy が失敗する。

ISS-20260517T212438890Z-SELFHOST-STDLIB-MAP-GRAPH-DOCTEST-EX-DACB7C6E は 2026-05-18 に修正した。tests/stdlib/neplg2_stdlib_map.n.md::doctest#2 が default 60000ms の compile timeout を超えていた根本原因は、module graph が import edge だけを必要としているにもかかわらず loader -> module_parser を通じて parser / lexer / AST 全体を静的検査対象へ引き込んでいたことである。修正後は VFS を module/vfs へ分離し、graph の通常経路は module/import_scan の top-level #import scanner から SelfhostImportRecord を得る。directive 構文と path / alias 抽出は既存の import_spec parser を使い、stdlib module 名や関数名の allowlist ではなく source text から import fact を導出する。これにより graph doctest の resource_static_check は約 30.5s から 20922ms まで下がり、default wasm doctest も compile_ms=48873, run_ms=23 で pass した。静的検査の正確性は弱めず、selfhost compiler 側の責務境界を狭める Stage 6 の性能・設計修正である。

ISS-20260518T004559104Z-SELFHOST-MODULE-GRAPH-KEEPS-OBSOLETE-8DDB7A8E も同じ 2026-05-18 に修正した。前項の軽量 graph path 導入後も、graph.nepl には SelfhostModuleAstSelfhostImportSpec による旧 import traversal helper が public API として残り、nodesrc/test_selfhost_string_helpers_boundary.js もその旧経路を要求していた。これは parser AST 依存を再び graph module へ戻す足場になるため、互換 API を残さず削除した。修正後の source policy は module/import_scanselfhost_scan_module_imports_with_file_idSelfhostImportRecord traversal を要求し、SelfhostModuleAst / SelfhostImportSpec / 旧 selfhost_module_graph_visit_imports / selfhost_module_graph_extract_imports の再導入を拒否する。これにより selfhost module graph の proof path は source-scanned import fact に一本化され、静的検査対象の不必要な拡大を source policy でも検出できる。

ISS-20260518T011425661Z-OWNED-REFERENCE-PAYLOAD-MATCH-IS-MIS-BDD651CC は 2026-05-18 に修正した。&Enum を match する borrowed payload binding 対応後、Resource IR lowering と backend codegen は bind_ty が reference かどうかを見て borrowed payload binding とみなしていた。そのため owned enum RefOpt::Some &x の payload binding まで synthetic borrow になり、cell checker は move 済み payload からの borrow と誤診断していた。修正後は HirMatchBindMode / ResourceMatchBindMode を追加し、Owned は payload 内の borrow token を binding へ移す経路、Borrowed { is_mut }&Enum payload place からの borrow を seed する経路として enum で分岐する。wasm/LLVM もこの mode を消費し、owned reference payload では payload slot address ではなく stored reference value を読む。これは Stage 6 の「型・IR 上の証明 artifact を enum で保持し、文字列や型形状の推測で検査責務を分岐しない」方針に沿う。

ISS-20260518T071033883Z-ALLOC-STRING-STORAGE-EXPOSES-UNCHECK-9EA051F0 は同じ 2026-05-18 に修正した。alloc/string/storage には string_finish_base(MemPtr<u8>, i32) -> str、public string_addr、public string_from_addr_unchecked が残り、alloc/string/scanner も public scanner_string_addr を持っていた。これらは Resource IR が str_addr を non-owning view、str_from_addr_unchecked を owner transfer として区別していても、通常 source が direct import で raw i32 observer / unchecked finalizer を呼べる public surface になっていた。修正後は string_finish_base と未使用 header pointer projection を削除し、str への所有権移行は RegionToken<u8> を消費する string_finish だけに集約した。storage / access / scanner が必要とする raw address helper は各 module の private helper に閉じ、source policy と memory safety doctest で public helper の再導入を拒否する。これは stdlib module 名 allowlist ではなく、public API surface から raw address authority を取り除き、compiler-owned source 内部でだけ source capability proof が効く形に戻す Stage 6 の境界整理である。

ISS-20260518T072300172Z-ALLOC-STRING-SCANNER-EXPOSES-UNCHECK-BE608F25 も同じ 2026-05-18 に修正した。alloc/string/scanner の public range helper は入力範囲を正規化してから internal byte reader を使う設計だが、scanner_string_byte_at_unchecked 自体も public だったため、direct import caller が範囲正規化を迂回できた。修正後は scanner 内部の unchecked byte reader を private にし、public surface は range helper と byte classification helper に限定した。これにより scanner module の raw string layout read は compiler-owned source 内部の proof boundary に戻り、source policy と memory safety doctest が public unchecked reader の再導入を拒否する。

ISS-20260518T072713737Z-ALLOC-STRING-PUBLIC-UNCHECKED-BYTE-A-896205D1 は 2026-05-18 に witness 化まで完了した。alloc/string/access に public string_byte_at_unchecked が残っていると、root alloc/string facade 経由の通常 import から raw string layout reader に到達でき、byte_at の bounds proof を迂回できる。一次修正では access.nepl を safe public API に寄せ、hot path を明示 alloc/string/unchecked_access へ隔離したが、これは proof を型に持たない過渡境界だった。最終修正では unchecked_access を削除し、alloc/string/byte_index の private StringByteIndex witness へ置き換えた。witness は checked_string_byte_index0 <= idx < len(s) を確認した場合だけ作り、raw reader string_byte_at_checked はこの witness を要求する。source policy と memory safety doctest は root/access/byte_index の public unchecked reader、public witness constructor、任意 i32 からの checked reader 呼び出しを拒否する。

ISS-20260518T121529150Z-STRING-BYTE-INDEX-CHECKED-OR-UNREACH-4C77E237 は 2026-05-18 に修正した。witness 化後に残った移行用 string_byte_at_checked_or_unreachable は raw read 前に witness factory を通っていたが、public API として任意 i32 を受け取り、proof failure を unreachable trap に変換していた。これでは Stage 6 の「検査誤りを型や match で露出させる」方針に対して、hot path が checked result を消費せずに失敗経路を消せる。修正後は public helper を削除し、checked_string_byte_at(str, idx) -> Option<i32>string_byte_eqstring_bytes_eqstring_bytes_cmp へ置き換えた。lexer / parser / scanner の sentinel loop は private adapter で Option::None を既存の -1 / failure sentinel に変換し、stdlib 名や module 名の allowlist ではなく source object と index check から導いた証明を API に残す。

ISS-20260518T112925248Z-UTF-8-RAW-BYTE-READERS-EXPOSE-UNCHEC-35257411 は 2026-05-18 に修正した。alloc/string/utf8std/text/validate は root facade から raw helper を再公開していなかったが、explicit submodule import では単一 byte raw reader と sequence validator が public のままだった。これは validate_mem / decode_next の byte_len discipline を通らないため、raw-memory-backed stdlib boundary として不十分だった。修正後は alloc/string/utf8 の単一 byte reader と sequence validator を private にし、内部 reader も byte_len を受ける checked helper へ変更した。std/text/validate は decode との module 境界に必要な text_utf8_byte_at_checked(data, byte_len, idx) だけを public に残し、旧 text_utf8_byte_at 名と sequence validator の public surface は削除した。これにより UTF-8 validation / decode は stdlib module 名の allowlist ではなく、caller が渡した MemPtr と byte_len contract を単一 helper に集約し、source policy と memory-safety doctest が unchecked public byte-reader surface の再導入を検出する。

ISS-20260518T104225390Z-ARGS-GET-AND-ENVIRON-GET-NEED-DEPEND-64A7F146 は 2026-05-18 に修正した。args_get / environ_get は call ABI 自体に argc / argv_buf_size / envc / environ_buf_size を持たないため、same-call HostMemorySpan だけでは pointer table と byte buffer の owner extent を証明できなかった。修正後は args_sizes_get / environ_sizes_get が書いた out cell を HostSizeKind 付きの typed proof artifact として RawCellAddressAliases に記録し、scalar load/copy/move/merge で伝搬する。args_get / environ_getHostDependentMemorySpan を消費し、byte buffer は prior buffer-size proof、pointer table は HostDependentLength::HostSizeScaled { bytes_per_item: 4 }i32_scaled_targets から導出した allocation extent によって検査する。initialized checker も旧来の unknown-offset 全体初期化を削除し、prior proof がある範囲だけを bounded initialized range として扱う。これは WASI operation 名や stdlib module 名を allowlist する修正ではなく、host が返した size cell、Resource IR scalar fact、owner extent coverage proof をつなぐ汎用 proof path である。

ISS-20260518T114636396Z-CLIARG-C-STRING-CONVERSION-LACKS-ARG-21786F27 は 2026-05-18 に修正した。std/env/cliarg/cstr は C string を MemPtr<u8> だけで受け、NUL が見つかるまで走査していたため、cliarg_get_checked が保持している argv_buf_raw / buf_size の owner extent proof を C string conversion へ渡していなかった。修正後は unbounded cstr_len_result / cstr_len / cstr_to_str を削除し、cstr_len_bounded_result(data, max_len)cstr_to_str_bounded_result(data, max_len) に置き換えた。cliarg_get_checkedarg_ptr - argv_buf_raw を検査してから buf_size - arg_offset を渡すため、C string の NUL 探索は argv byte buffer の残り範囲内に閉じる。さらに string_from_utf8_mem_result によって external argv bytes の UTF-8 妥当性を確認してから str を構築するため、raw memory backed external input を unchecked string construction へ直結しない。これは stdlib module allowlist ではなく、caller が持つ buffer extent proof を API signature に残して source policy と doctest で監視する Stage 6 の境界整理である。

ISS-20260518T115751573Z-BYTEBUILDER-PUBLIC-RAW-BYTE-APPEND-D-D94BB3A0 は 2026-05-18 に修正した。byte_builder_push_bytes_ref は public API として MemPtr<u8> と length を直接受け取り、mem_copy の source extent proof を caller convention に依存させていた。修正後は raw copy helper を private にし、public API を byte_builder_push_strbyte_builder_push_str_slice に置き換えた。full string append は同じ str から lenstring_data_ptr を導出し、slice append は 0 <= start <= end <= len(s) を確認してから pointer と length を導出する。これは stdlib module 名や helper 名の allowlist ではなく、source object から readable extent を導出する typed API を通して、Stage 6 の raw-memory-backed public surface を閉じる整理である。

ISS-20260519T172250950Z-RESOURCE-IR-BYTEBUILDER-REGRESSION-C-5E7800F8 は 2026-05-19 に修正した。byte_builder_push_bytes_ref を private helper に戻した後も、Resource IR regression が旧 raw MemPtr append helper を直接呼ぶ source のまま残っていた。修正後は public byte_builder_push_str 経由で append し、その後も同じ source strlen を読めることを確認する。これにより raw pointer/length pair を再公開せず、source object 由来の readable extent proof と Resource IR owner behavior を同じ regression で固定する。

ISS-20260518T130359928Z-BYTEBUILDER-EMPTY-STORAGE-STILL-USES-D46A4A9A は 2026-05-18 に修正した。ByteBuilderbyte_builder_empty_region を public から外した後も、内部では region_new(mem_ptr_wrap 0, 0) を空状態として保持していた。修正後は ByteBuilderStorage::Empty | Owned(RegionToken<u8>) を導入し、reserve / append / finish / free は storage enum を match して、free obligation owner を持つ branch だけが RegionToken<u8> を消費する。これにより ByteBuf と同じく空 storage に owner token payload が存在しなくなり、source policy は sentinel helper、zero-size region_new、旧 "region" field 参照の再導入を拒否する。

ISS-20260518T121306047Z-STAGE-6-SOURCE-POLICY-REGRESSIONS-DR-966050CB は 2026-05-18 に修正した。Stage 6 の stdlib boundary refactor 後、source policy の一部が旧 module layout や旧 doctest count を前提にしていたため、builder_ext の raw evidence 期待、cliarg report count、selfhost reporter split、compile_fail diag metadata を現在の構造へ合わせた。これは検査を弱める変更ではなく、source policy が typed helper boundary と diagnostic metadata を正しく監視できるようにする保守である。同時監査で分離した trap-based byte helper issue は、上記 ISS-20260518T121529150Z-STRING-BYTE-INDEX-CHECKED-OR-UNREACH-4C77E237 として public API 削除まで完了した。

ISS-20260518T132553358Z-BINARYHEAP-PUSH-GROW-FAILURE-DESTROY-FC308045 は 2026-05-18 に修正した。BinaryHeap.push は owner-consuming API であるにもかかわらず、grow allocation failure では旧 Vec<Option<T>> storage を内部で free して Diag だけを返していた。これは caller が cleanup / retry を選べず、Resource IR が failure path の owner transfer を API 型から証明しにくい構造だった。修正後は BinaryHeapPushError<T> を導入し、push<T>Result<BinaryHeap<T>, BinaryHeapPushError<T>> に変更した。failure payload は heap: BinaryHeap<T>diag: Diag を持ち、success / failure は typed Result::Ok / Result::Err constructor で直接構築する。source policy は旧 grow failure branch の vec::free<Option<T>> itemserr<BinaryHeap<T>, Diag> e への退行を拒否するため、Stage 6 の owner-preserving fallible update 方針が BinaryHeap にも適用される。

ISS-20260518T134512597Z-DEQUE-PUSH-GROW-FAILURE-DESTROYS-THE-081F1BD4 は 2026-05-18 に修正した。Deque.push_front / push_back も owner-consuming API であるにもかかわらず、grow allocation failure では旧 Vec<Option<T>> storage を内部で free して Diag だけを返していた。修正後は DequePushError<T> を導入し、push_front<T> / push_back<T>Result<Deque<T>, DequePushError<T>> に変更した。failure payload は deque: Deque<T>diag: Diag を持ち、caller は diagnostic を読んだ後に deque owner を取り出して cleanup / retry を選べる。source policy は旧 grow failure branch の vec::free<Option<T>> itemserr<Deque<T>, Diag> への退行を拒否するため、Stage 6 の owner-preserving fallible update 方針が Deque にも適用される。

ISS-20260518T203331363Z-STD-FS-PATH-ENTRY-EXPOSES-RAW-DIRECT-E3B0CD92 は 2026-05-18 に修正した。std/fs/path/entry は safe path facade から re-export される module だったが、fs_string_from_bytes(i32,i32) を public に持ち、任意 raw address を mem_ptr_wrapMemPtr<u8> に包んで directory entry name の str 化を行っていた。修正後は conversion を std/fs/dir/read_fd の private fs_dirent_name_to_string(MemPtr<u8>, i32) へ移し、fs_read_dir_fdfd_readdir buffer の RegionToken から導出した buf_ptrmem_ptr_add して name pointer を得る。これにより safe path facade は raw i32 address conversion を公開せず、directory entry raw byte handling は raw ABI boundary 内の source proof と owner/view 分離に従う。

ISS-20260518T205653919Z-STD-FS-WRITE-FACADE-EXPOSES-RAW-MEMP-A8C64961 は 2026-05-18 に修正した。std/fs/write facade は std/fs/write/fd を再公開しているため、fs_write_fd_mem_result(i32, MemPtr<u8>, i32) が public のままだと通常 source が ByteBuf owner 境界を迂回し、任意の non-owning pointer と任意 length を raw fd write loop へ渡せる。修正後はこの helper を fd module private に戻し、public fd write は fs_write_fd_bytes(fd, ByteBuf) へ限定した。ByteBuf から datadata_len を同時に導出してから内部 helper へ渡すため、readable span の証明を caller convention ではなく owner-backed API shape に残す。source policy と compile-fail doctest は、safe facade と direct fd module import の両方で raw span writer が公開されないことを固定する。

ISS-20260518T210549005Z-STD-STDIO-WRITE-FACADE-EXPOSES-RAW-M-11591E6E は 2026-05-18 に修正した。std/stdio/write facade から std/stdio/write/fd が再公開される構造で、stdio_write_fd_mem_result(i32, MemPtr<u8>, i32) と stdout/stderr の raw span wrapper が public になっていたため、通常 source が str / ByteBuf / ByteBuilder 由来の readable extent 証明を迂回できた。修正後は raw fd write loop を private helper に閉じ、public API は strByteBuf、borrowed ByteBuilder prefix、single byte それぞれの typed wrapper へ分けた。streamio/writer の flush も raw pointer view を直接構成せず、stdio_write_fd_bytebuilder_prefix_result に委譲する。これは stdlib module allowlist ではなく、source object と checked length から span を導出する API shape を compiler / source policy が監視する Stage 6 の境界整理である。

ISS-20260519T171550554Z-RESOURCE-IR-SCRATCH-CLEANUP-REGRESSI-41096EA9 は 2026-05-19 に修正した。stdio_write_fd_mem_result を private helper に戻した後も、Resource IR の scratch cleanup regression が旧 raw span writer を直接呼ぶ source のまま残っていたため、focused Rust test が import visibility の時点で失敗していた。修正後の regression は public stdio_write_fd_byte_result から入り、monomorphization 後に private stdio_write_fd_mem_result / stdio_fd_write_from_result の owner cleanup と host span proof を検査する。これにより通常 source に raw pointer/length pair を再公開せず、Stage 6 の typed public boundary を通した形で Resource IR 内部証明を固定する。

ISS-20260518T213314500Z-STD-STDIO-READ-BUFFER-EXPOSES-RAW-ME-5BAB55A1 は 2026-05-18 に修正した。std/stdio/read facade 自体は read/buffer を再公開していなかったが、direct import では stdio_fd_read_into_result(i32, MemPtr<u8>, MemPtr<u8>, MemPtr<u8>, i32) が public に見えていた。これは iov / nread scratch と read destination を caller が任意の MemPtr / length pair として渡せるため、fd_read の writable extent proof が RegionToken owner から導出されず、Stage 6 の MemPtr = non-owning pointer 方針に反していた。

修正後は raw MemPtr fd_read helper を std/stdio/read/buffer 内の private helper に閉じ、lower-level な RegionToken slice wrapper も公開しない。public API は stdio_read_all_buffer_result / stdio_read_line_buffer_result という高水準 ByteBuf read boundary に限定した。fd_read loop、iov/nread scratch、destination buffer の owner はすべて read/buffer の local RegionToken<u8> として確保され、non-owning MemPtr view は同じ関数内でだけ導出される。read/bytesstdio_read_all_buffer_result に委譲し、read/textstdio_read_line_buffer_result の結果を UTF-8 検証へ渡すだけにしたため、readable/writable extent は stdlib module allowlist でも caller convention でもなく source object と local owner proof の組で表現される。

ISS-20260519T073007560Z-RESOURCEEFFECT-RAW-IDENTITY-SUMMARY--1691BDDC は 2026-05-19 に修正した。function_returned_identity_projections_with_engineTypeCtx を受け取っていたが、内部の ResourceEffectBoundaryEnginetypes: None を渡していたため、raw identity summary replay だけが本体検査と違う Copy / move semantics で動いていた。修正後は summary replay も同じ TypeCtx を消費し、Copy 型 parameter を move した後に summary call へ渡す場合でも identity が維持されることを unit test で固定した。これは stdlib 名や module 名の個別許可ではなく、Resource IR summary application が typed proof を失わないようにする Stage 6 の correctness 修正である。

同時に examples/nm.nepl の full compile timeout は ISS-20260519T074504799Z-NM-FULL-COMPILE-STILL-EXCEEDS-CI-BUD-5653B487 へ分離した。修正後 probe でも resource_initialized_raw_init_summaries が約 86 秒、resource_initialized_moves が約 104 秒、さらに resource_effect_boundaries が 140 秒以上戻らないため、残件は raw identity TypeCtx 欠落ではなく Resource IR summary stage 全体の計算量設計である。timeout 延長や doctest skip ではなく、summary dependency graph、再計算境界、effect boundary proof の汎用化によって CI budget 内へ戻す必要がある。

ISS-20260519T081602763Z-RESOURCE-VARIANT-INIT-SUMMARY-SCANS--5F80D6A9 は 2026-05-19 に修正した。raw initialization summary の variant-param fact 構築は、Branch が enum variant を返す場合だけ意味を持つが、旧実装は str / StringBuilder のような concrete non-enum return でも関数 body を ResourceCheckEngine で再走査していた。修正後は TypeCtxTypeKind を網羅的に match し、Enum / enum Apply / 未解決型だけを variant summary replay 対象にする。これは stdlib/nm の関数名や module 名の allowlist ではなく、戻り値型から variant fact の存在可能性を証明する汎用 pruning である。local probe では resource_initialized_raw_init_summaries が約 76 秒、resource_initialized_moves が約 95 秒まで下がった。ただし release requirement collection と resource_effect_boundaries がまだ支配的なので、ISS-20260519T074504799Z-NM-FULL-COMPILE-STILL-EXCEEDS-CI-BUD-5653B487 は open のまま継続する。

ISS-20260519T090154240Z-RESOURCE-INIT-SUMMARY-RELEASE-REQUIR-58379116 は同じ 2026-05-19 に修正した。release requirement collection は ResourceCheckEngine の raw-address view simulation を使うため、旧実装では普通の initialized parameter cell から作った str / plain aggregate の non-owning raw view も caller 側 release requirement として要約していた。修正後は initialized_summary_seed.rs に summary input の raw-address carrier 判定を集約し、str / plain aggregate を除外しつつ、top-level raw i32TypeCtx に登録済みの MemPtr / RegionToken carrier は維持する。requirement の param candidate も同じ判定を使うため、stdlib/nm 名や関数名の allowlist ではなく、型・Resource IR 上 non-copy raw cell を保持し得るかだけで pruning する。local probe では resource_initialized_raw_init_summaries が約 43 秒、resource_initialized_moves が約 66 秒まで改善した。full compile はまだ300秒内に完了せず、残る主因は resource_effect_boundaries と raw init summary 内の他の再計算境界として、親 issue ISS-20260519T074504799Z-NM-FULL-COMPILE-STILL-EXCEEDS-CI-BUD-5653B487 で継続する。

ISS-20260519T092414550Z-RESOURCE-RAW-POINTER-SUMMARY-TREATS--CFB63B46 は同じ 2026-05-19 に修正した。raw pointer summary carrier 判定は owner-backed struct を除外していたが、ByteBuilderStorage::Owned(RegionToken) のような enum payload 内の owner token を structural owner carrier として辿っていなかった。その結果、StringBuilder / ByteBuilderlen / cap metadata i32 が raw pointer carrier として扱われ、resource_effect_boundaries が数分戻らない状態になっていた。修正後は raw_identity_type_contains_opaque_owner が enum payload と applied enum payload も網羅的に辿り、owner token を含む enum-backed storage とその wrapper aggregate を raw pointer summary carrier から外す。これは StringBuilder 名の allowlist ではなく TypeCtx の owner token proof と型構造の汎用 traversal による pruning である。local probe では resource_effect_boundaries=786ms まで改善し、nm compile は timeout ではなく cliarg dependent host-span owner proof の診断へ到達した。

ISS-20260519T154609873Z-RESOURCE-RAW-IDENTITY-SUMMARY-BLOCKS-E4C8EDF4 は同じ 2026-05-19 に修正した。上記の enum owner carrier pruning は performance 上必要だったが、raw identity internal summary まで enum root で遮断すると Result<RegionToken<T>, E>Ok payload provenance が消え、alloc_region -> region_ptr/region_ptr_at -> store/load/fill の checked MemPtr 証明が resource.raw.memory_outside_boundary で落ちる。修正後は struct / tuple などの structural owner carrier aggregate root は引き続き summary carrier から外し、enum payload は variant-gated provenance として辿る。checked MemPtr proof も exact raw field だけでなく pointer alias group を確認するため、RegionToken.rawMemPtr.raw の alias を Resource IR dataflow から証明できる。これは Resultcore/mem の名前を列挙する許可ではなく、enum variant と owner token 型を使った汎用 proof の復旧である。

この結果として ISS-20260519T092458711Z-CLIARG-ARGS-GET-DEPENDENT-OWNER-PROO-3D72A977 を追加した。examples/nm.neplcliarg_count_resultcli_args_sizes_result metaresource.owner.no_free_obligationcliarg_get_checkedargs_get argv_raw argv_buf_rawExternalIoPayloadExtent / resource.owner.unavailable に到達している。これは Stage 6 の MemPtr = non-owning pointer view / RegionToken = free obligation owner 分離を緩める理由ではなく、args_sizes_get 由来の prior size proof と RegionToken owner extent を raw cliarg helper 境界の中で generic dependent host-span proof へ接続する残件として扱う。

ISS-20260519T142436433Z-RESOURCE-IR-RAW-MEMORY-SPAN-SUMMARIE-FB862D7E は 2026-05-19 に修正した。Resource IR owner summary は host-visible memory span だけを caller requirement にしていたため、string_from_mem_unchecked_resultstring_from_utf8_mem_result のような compiler-owned stdlib callee 内の raw read/copy が、caller 側の RegionToken extent と length の対応を要求していなかった。修正後は OwnerReturnSummary の span requirement を operation 付き memory_span_requirements に広げ、ExternalIoPayloadExtentRawMemoryPayloadExtent を同じ generic owner extent proof machinery で扱う。

これにより direct import で 1 byte region の MemPtr<u8> と length 100 を string raw-span helper へ渡す経路は resource.owner.unavailable で拒否される。stdlib module 名や関数名を列挙して許可/拒否するのではなく、raw operation が読む/書く byte span を Resource IR summary と owner extent proof で call site へ持ち帰る形にした。raw allocator など owner model より下層の compiler-owned internal address は誤診断しない一方、caller parameter に由来する MemPtr span は必ず owner extent requirement になる。

ISS-20260519T144811685Z-RESOURCE-IR-RAW-SPAN-SUMMARIES-MISS--FA49E19D は同じ 2026-05-19 に修正した。cstr_to_str_bounded_resultwhile i < max_len 内にある load_u8(mem_ptr_add p i)p[0..max_len] の requirement へ要約されなかった根本原因は、Resource IR の condition fact lowering が複合 and 条件内の未認識 boolean conjunct に引きずられて、認識可能な i < max_len fact まで捨てていたことだった。修正後は and / or を認識済み child fact の All / Any として保持し、path semantics 上 sound な branch でだけ既知 fact を使う。さらに checked MemPtr wrapper 経由でも memory_span_requirements を caller へ適用し、cstr 側は source 上で 0 <= i < max_len を明示する。これは cstr 専用の証明器ではなく、bounded scanner 全体へ適用できる Resource IR の path-conditioned span obligation として扱う Stage 6 の correctness 修正である。

ISS-20260519T170102229Z-COLLECTION-POP-OWNER-ACCESSORS-LACK--B71B4C03 は同じ 2026-05-19 に修正した。collection pop result は更新後 owner と取り出した item を同時に保持するため、result を消費して owner だけを返す accessor は、non-Copy payload では item drop / move state を同じ API 境界で証明する必要がある。既存の Vec / Stack / Queue / Deque / RingBuffer / BinaryHeap は個別 policy で Copy-only に保たれていたが、新しい pop result accessor を追加した時に同じ制約を横断的に検出する guard がなかった。修正後は nodesrc/test_stdlib_collection_cleanup_contract.jsPop<...> parameter を値渡しで消費し generic owner を返す関数型を構造的に検出し、全 generic parameter に Copy bound を要求する。これは collection 名の allowlist ではなく、owner recovery accessor の型形状に基づく Stage 6 の退行検出であり、OwnedBuffer<T> / initialized prefix / moved slot / drop traversal が完成するまで unsupported non-Copy payload loss を防ぐ。

ISS-20260519T173256333Z-STD-ENV-CLIARG-RAW-MEMPTR-HELPERS-RE-6C50B75B は同じ 2026-05-19 に修正した。std/env/cliarg/raw.nepl は root facade から raw argv scratch を分離していたが、cli_args_sizes_result、scratch zeroing、checked byte load、LLVM /proc/self/cmdline shim まで pub のままで、ordinary source が direct import して raw MemPtr<u8> と size/offset helper に依存できた。修正後は root-facing な cliarg_count_result / cliarg_get_checked だけを公開し、implementation-only raw MemPtr helper と LLVM shim は private に閉じる。これは Resource IR の dependent host-span proof を緩めるものではなく、MemPtr を non-owning view として raw boundary 内に限定し、公開 API には checked argv 取得契約だけを残す Stage 6 の public surface 整理である。source policy と compile_fail doctest で pub の再導入を監視する。

ISS-20260519T174525211Z-LIST-TRANSFORM-ERRORS-DISCARD-CONSUM-49FECBE5 は同じ 2026-05-19 に修正した。List.map / List.filter は入力 List<T> owner を消費して新しい list owner を返す fallible transform だが、旧実装は allocation failure と storage invariant failure で入力 Vec<T> storage を内部 free して Diag だけを返していた。これは caller が cleanup / retry を選べず、Resource IR から見ても failure branch の owner transfer が API 型へ現れない構造だった。修正後は ListTransformError<T> を導入し、map<T, U>Result<List<U>, ListTransformError<T>>filter<T>Result<List<T>, ListTransformError<T>> を返す。failure branch は部分出力 Vec だけを閉じ、入力 List<T> owner は error payload で caller へ戻す。さらに collection source policy は generic collection owner を値渡しで消費する fallible API が bare Diag / StdErrorKind を返す型形状を検出するため、同じ退行を個別 collection family の policy 追加漏れに依存せず拒否できる。

ISS-20260519T181131422Z-BYTEBUILDER-FALLIBLE-OWNER-APIS-DISC-DBFDE7BB は 2026-05-20 に修正した。ByteBuilder.reserve / append / finish は builder owner を値渡しで消費するにもかかわらず、旧 API では内部 cleanup 後に bare StdErrorKind だけを返していた。修正後は ByteBuilderError に入力 builder owner と error kind を戻し、byte_builder_push_bytebuf は builder と入力 ByteBuf の 2 owner を ByteBuilderByteBufError で戻す。realloc helper は byte_builder_realloc_region_or_keep とし、失敗時に旧 RegionToken<u8>RegionReallocError<u8> から復元して builder owner に戻す。source policy は owner-consuming ByteBuilder fallible API が bare StdErrorKind を返す形と旧 *_or_free cleanup helper の復活を拒否するため、byte buffer owner boundary も collection fallible update と同じ owner-preserving API discipline に揃った。

ISS-20260519T195128604Z-STD-STDIO-RAW-EXPOSES-PUBLIC-MEMPTR--732B30C2 は 2026-05-20 に修正した。std/stdio/raw は root facade から再公開していなかったが、direct import では stdio_fd_read_mem / stdio_fd_write_mem / stdio_fd_write_from_result が public であり、通常 source が caller-selected MemPtr / length pair を fd I/O helper へ渡せた。修正後は std/stdio/raw に raw i32 ABI wrapper だけを残し、MemPtr から raw address への変換、iovec / nread / nwritten scratch の初期化、fd_write result 正規化は std/stdio/read/bufferstd/stdio/write/fd の private owner-boundary helper へ移した。これは stdlib module 名の allowlist ではなく、source object と local RegionToken<u8> owner から導出した proof を helper の配置と visibility で保持する Stage 6 public raw surface 整理である。

ISS-20260519T201031870Z-DROP-IMPL-CAN-TARGET-COPY-TYPES-AND--988FC60A は 2026-05-20 に修正した。Drop は owner finalizer、Copy は暗黙複製を許可する capability であり、同じ target 型で両立すると Resource IR の end-scope auto-drop が Copy local を除外する仕様と衝突する。修正前は impl Drop for i32 や、ユーザー型に DropCopy を同時実装する case が typecheck を通り、Drop 実装が存在しても自動 drop されない状態を作れた。修正後は TypeDiagnosticCode::DropImplTargetCopy / type.drop_impl.target_copy を追加し、impl registration で rejected Copy impl を除外した後、残る Copy impl target と Drop impl target の type-pattern overlap を generic pattern も含めて検査する。built-in / bound 由来で既に Copy と証明できる target は TypeCtx::is_copy で拒否し、impl<.T> Drop for .T のような blanket target も copy impl pattern と重なれば同じ診断で拒否する。これは stdlib allowlist や個別型列挙ではなく、trait capability と type pattern matching に基づく compiler-side proof で Drop/Copy の不変条件を固定する Stage 6 の静的検査 correctness 修正である。

ISS-20260519T202611033Z-CLONE-CAPABILITY-TYPE-VARIABLES-DO-N-47C8522F は 2026-05-20 に修正した。collect_type_params.T: CloneLike のような capability bound を TypeVar.clone_cap に記録していたが、TypeCtx::pattern_var_capabilities_matchcopy_capdrop_cap だけを検査していた。そのため clone capability trait の generic impl target が、payload 側の clone proof を持たない型にも match し得た。修正後は TypeCtxclone_impl_targets を snapshot / rollback 可能な registry として保持し、has_clone query を通して clone_cap を type-pattern variable matching に反映する。clone capability impl target も copy/drop と同じ registration phase で登録するため、trait resolution は impl 宣言の generic bound を無視できない。recursive blanket impl が自分自身を proof として使わないように clone capability query は訪問中 target を追跡する。Copy は clone capability impl を要求する既存設計なので、type variable capability では copy_capclone_cap の充足として扱う。これは抽象化機能の証明を個別 trait 名や stdlib allowlist ではなく、capability enum と TypeCtx の proof registry に接続する Stage 6 の type safety 修正である。

ISS-20260519T203555031Z-RECURSIVE-COPY-AND-DROP-CAPABILITY-I-2CFBD501 は 2026-05-20 に修正した。Clone の修正後も、Copy / Drop の capability query は type_pattern_matches から capability impl target を調べる時に同一 target への再入を共有文脈で検出できなかった。これにより impl<.T: CopyLike> CopyLike for .Timpl<.T: Drop> Drop for .T のような recursive blanket impl が、対象型自身の capability proof を要求しながら自分の impl target matching を proof として使う余地があった。修正後は CapabilityQueryStackcopy / clone / drop の訪問中 target をまとめて保持し、type_pattern_matches、impl target registry query、pattern_var_capabilities_matchis_copy / has_clone / has_drop が同じ証明文脈を共有する。再入した capability target は「まだ証明されていない」ものとして拒否するため、個別 module / stdlib 関数名の許可ではなく TypeCtx の汎用 capability proof mechanism で循環証明を遮断する。回帰テストは Copy / Drop / Clone の recursive blanket impl が trait bound を満たさないことを通常の typecheck 経路で固定している。

ISS-20260519T221017627Z-SELF-HOST-MODULE-AST-DROPS-DECLARATI-7F9E1FD2 は 2026-05-20 に修正した。self-host の SelfhostModuleItem は declaration item を keyword token span と lexeme だけで保持していたため、後続の checker が declaration header の正当性を証明するには文字列再走査か checker-local rule を増やすしかなかった。修正後は parser が SelfhostModuleDeclarationHeader を生成し、kind、visibility、header span、keyword span、head token kind を typed evidence として AST に保持する。proof 層には SelfhostModuleDeclarationFactModuleDeclarationHeaderAvailable obligation、成功 evidence、ModuleDeclarationHeaderMissing / ModuleDeclarationHeaderInvalid refutation を追加し、module checker は item kind と parser evidence を proof solver へ渡して診断へ変換するだけにした。これは self-host declaration だけの個別証明器を作る修正ではなく、parser が観測した source fact を core/proof/ の汎用 fact / obligation / refutation 境界へ載せる Stage 6 の設計である。今後 trait header、generic parameter、effect annotation、Resource IR seed を追加する場合も、同じ proof query 入口に fact を増やし、checker-local special-case を増やさない。

ISS-20260519T234344678Z-SELF-HOST-PROOF-MISMATCH-REFUTATION--35D774CC は 2026-05-20 に修正した。self-host proof solver の FactObligationMismatch は payload を持たず、fact と obligation の domain を捨てていたため、proof program の誤配線を typed result から追跡できなかった。修正後は SelfhostProofMismatch が fact domain と obligation domain を SelfhostProofDomain で保持し、mismatch 生成は selfhost_proof_fact_domain / selfhost_proof_obligation_domain から導出する private helper に集約した。これにより、type / trait / effect / Resource IR obligation を追加したときも、誤った fact を渡す実装ミスが単なる generic failure へ潰れず、match による監査対象として残る。回帰テストでは raw backend fact と source span obligation の誤接続が Module -> Source の mismatch payload を返すことを固定した。

ISS-20260519T235256769Z-SELF-HOST-RESOURCE-CELL-STATE-STAYS--847C852A は 2026-05-20 に修正した。core/resource/move_state.nepl は Stage 0 marker だけを持ち、initialized / moved / dropped の cell state を Resource domain の proof obligation として表せなかった。修正後は SelfhostResourceCellStateSelfhostResourceCellEventKind を typed model として追加し、SelfhostResourceCellEventFactResourceCellTransition obligation、成功 evidence、不正遷移 refutation を core/proof/ に追加した。Initialize / MoveOut / Drop は state ごとの exhaustive match で検査し、move after move、drop after move、double drop などは SelfhostResourceCellTransitionError として保持する。これは Resource checker に ad hoc state machine を置く修正ではなく、Resource IR lowering や checker が event fact を作り、generic proof solver が cell transition を証明するための Stage 6 Resource proof 基盤である。

ISS-20260520T005418281Z-SELF-HOST-BORROW-ACCESS-IS-NOT-REPRE-B7FAE5C1 は 2026-05-20 に修正した。Resource domain proof は initialized / moved / dropped cell transition まで進んでいたが、shared / mutable borrow の排他性を表す typed state と proof obligation がなかった。修正後は core/resource/borrow_state.neplSelfhostBorrowStateSelfhostBorrowRequestKind を追加し、core/proof/SelfhostBorrowAccessFactResourceBorrowAccess obligation、ResourceBorrowAccess evidence、BorrowAccessInvalid refutation を追加した。Shared(count) は count が 1 以上であることを proof solver が検査し、mutable while shared、shared while mutable、二重 mutable borrow、対応しない end request を SelfhostBorrowAccessError として保持する。これは borrow checker に alias special-case を置く修正ではなく、Resource IR lowering が borrow request fact を作り、generic proof solver が borrow access transition を検査する Stage 6 borrow proof 基盤である。

ISS-20260520T011528599Z-SELF-HOST-LIFETIME-OUTLIVES-IS-NOT-R-6C9E1A5D は 2026-05-20 に修正した。self-host proof boundary は borrow access conflict を扱えるようになったが、borrow が return value、長寿命 storage、closure capture へ逃げる時に、subject lifetime が required lifetime を outlive することを typed proof として表せなかった。修正後は core/resource/lifetime.neplSelfhostLifetimeIdSelfhostLifetimePositionSelfhostLifetimeScopePathKindSelfhostLifetimeRelationSelfhostLifetimeUseKind を追加し、core/proof/SelfhostLifetimeOutlivesFactLifetimeOutlives obligation、LifetimeOutlives evidence、LifetimeOutlivesInvalid refutation を追加した。depth だけでは兄弟 scope を区別できないため、outlives relation は source scope graph が出す typed path evidence から作り、depth-only helper は異なる lifetime id を Unrelated にする。solver は required lifetime mismatch、invalid lifetime、shorter subject、unrelated relation を enum reason として拒否する。これは lifetime checker に escape special-case を置く修正ではなく、source scope graph から導出した lifetime relation を generic proof solver が検査する Stage 6 lifetime proof 基盤である。

ISS-20260520T000413115Z-SELF-HOST-EFFECT-BOUNDARY-IS-NOT-REP-0CB47C08 は 2026-05-20 に修正した。self-host compiler 側には pure / impure / unsafe / internal allocation effect を表す typed model がなく、後続の effect checker が bool flag、文字列分類、checker-local special-case を増やす危険があった。修正後は core/ty/effect.neplSelfhostEffectKindSelfhostEffectEscapeStateSelfhostEffectContext を追加し、core/proof/EffectObserved fact、EffectAllowedInContext obligation、EffectAllowed evidence、EffectBoundaryInvalid refutation を追加した。pure context では Pure と no-escape 証明済み InternalAlloc だけを許可し、ExternalIo / Nondet / unsafe memory / escape し得る internal allocation は typed reason 付き refutation にする。これは stdlib module の個別許可ではなく、Resource IR などが生成する effect observation fact と escape proof state を generic proof solver が exhaustive match で検査する Stage 6 effect proof 基盤である。

ISS-20260520T001923700Z-SELF-HOST-TYPE-KIND-COMPATIBILITY-IS-8009C28D は 2026-05-20 に修正した。self-host proof architecture は SelfhostProofDomain::Type を持っていたが、type kind compatibility は selfhost_type_kind_eq の bool helper に留まり、type checker が typed evidence/refutation を経由せず判定できる状態だった。修正後は SelfhostTypeKindFactTypeKindCompatible obligation、TypeKindCompatible evidence、TypeKindMismatch refutation を追加し、expected / actual / span を typed payload に残す。これは型名や文字列診断への直行ではなく、type checker が観測した type kind fact を generic proof solver の exhaustive match に通す Stage 6 type proof 基盤である。

ISS-20260520T003842270Z-SELF-HOST-TRAIT-COHERENCE-IS-NOT-A-G-E107D307 は 2026-05-20 に修正した。self-host proof architecture は SelfhostProofDomain::Trait を持っていたが、trait impl overlap / coherence は fact / obligation / evidence / refutation として表せず、後続の trait checker が trait 名文字列や checker-local rule を増やす危険があった。修正後は core/ty/trait_ref.neplSelfhostTraitIdSelfhostTraitImplKeySelfhostTraitImplRelation を追加し、candidate / existing impl の relation を trait id と SelfhostTypeArena の構造的 self type equality から導出する。core/proof/ には SelfhostTraitImplPairFactTraitImplNonOverlapping obligation、TraitImplNonOverlapping evidence、TraitImplCoherenceInvalid refutation を追加した。duplicate impl、invalid candidate key、invalid existing key は SelfhostTraitImplCoherenceError として保持する。これは個別 trait ごとの証明器ではなく、source type arena から導出された impl key relation を generic proof solver が exhaustive match で検査する Stage 6 abstraction proof 基盤である。

ISS-20260520T020822877Z-SELF-HOST-PROOF-SOLVER-IS-RE-GROWING-905DDB3F は 2026-05-20 に修正した。owner / borrow / lifetime / type / trait / effect proof を generic solver に載せた結果、core/proof/solver.nepl が internal proof rule と public typed wrapper を同じ file に抱え、self-host 実装で避けるべき flat module へ戻り始めていた。修正後は core/proof/api.nepl を追加し、caller 向け query builder と typed result projection を API module に分離した。core/proof/solver.neplSelfhostProofQuery -> SelfhostProofResult の汎用 entry point と private な enum-matched proof rule に限定する。mismatch refutation 生成は core/proof/query.nepl の generic helper に置き、solver と API wrapper が同じ typed domain mismatch を共有する。これは個別 module ごとに証明器を増やす修正ではなく、proof engine と API surface の責務を分け、静的検査プログラム自体の誤りを契約テストで検出しやすくする Stage 6 self-host proof architecture 整理である。

ISS-20260520T111714158Z-VEC-INVARIANT-DOES-NOT-PROVE-BACKING-46A3C801 は 2026-05-20 に修正した。VecCopyInvariantlen / initialized_len / cap / storage tag の相関を typed enum proof にしていたが、VecStorage::Owned(region) の actual byte extent が cap * size_of<T> と一致することを証明していなかった。修正後は OwnedStorageExtentMismatch を typed refutation として追加し、size_of<T>、allocator payload 上限、checked cap * size_of<T>region_size(region) を同じ invariant helper で検査する。これは Vec module 固有の raw access 許可ではなく、source object の capacity metadata と owner token extent の相関を enum / match の proof に含める Stage 6 stdlib boundary の補強である。

ISS-20260520T113031972Z-VEC-DATA-VIEW-COLLAPSES-INVALID-INVA-D6378EBA は 2026-05-20 に修正した。data_mem_ptr<T>(&Vec<T>) -> MemPtr<T> は invalid OwnedBuffer<T> と valid empty storage の両方を mem_ptr_wrap 0 に潰していたため、VecCopyInvariantInvalid を typed refutation として保持する設計と矛盾していた。修正後は互換 alias を残さず data_mem_view<T>(&Vec<T>) -> VecDataView<T> へ移行し、EmptyData(MemPtr<T>)Invalid(VecCopyInvariantInvalid) を caller が exhaustive match する。sort / transform / get / replace / pop は VecDataView::Data branch の中だけで raw load/store へ進み、空 storage と malformed storage を null pointer 値で同一視しない。

ISS-20260520T153639309Z-REGIONTOKEN-CONSTRUCTION-SHARES-GENE-C5BF72D0 は 2026-05-20 に修正した。region_newRegionToken<T> owner token construction であり、mem_ptr_wrap の non-owning raw-address alias とは別の証明対象である。修正前は両者が RawAddressAliasBoundary に混ざっていたため、source proof program と Resource IR effect gate が owner token construction だけを網羅的に分岐できなかった。修正後は SourceCapabilityUseSite::OwnerTokenConstructBoundary / SourceCapabilityProofFact::OwnerTokenConstructBoundary / RawAddressAliasKind::OwnerTokenConstruct を追加し、effect gate は owner_token_construct_boundary_allowed_at だけで region_new を許可する。これは RegionToken 完成ではなく、compiler-issued owner token / OwnedRegion / initialized cell state へ進むために、generic raw alias と owner issuance の proof domain を分離する Stage 6 compiler-core 境界整理である。

ISS-20260520T160659900Z-RAW-FILL-CAN-CREATE-INITIALIZED-RANG-641CBC9C は 2026-05-20 に修正した。RawMemoryOp::Fill は同じ value を複数 element に複製する操作であるため、Resource IR が non-Copy value type から InitializedRawRangeUnit::Elements を作ると、owner payload が shallow duplication されたことを証明してしまう。修正後は check_raw_memory_fill_wordsTypeCtx::is_copy(value.ty) を満たす場合だけ initialized range evidence を作る。non-Copy payload の collection slot 初期化は raw fill ではなく、個別 store / move-out / drop traversal の proof へ接続する。

ISS-20260520T161920508Z-RESOURCE-IR-RAW-CELL-LIFECYCLE-TRANS-35AEA479 は 2026-05-20 に修正した。raw load/store/fill/bulk/realloc/dealloc の initialized/moved/released transition は、各 checker operation が CellTable を直接組み合わせる形から、RawCellLifecycleEventmatch する単一境界へ寄せた。非Copy raw load で cell を Moved にするときは、同じ raw address 範囲に残る initialized cell entry と initialized raw byte range を破棄するため、古い byte-range proof や aggregate initialized proof が後続 load を再び初期化済みに見せる経路を閉じる。store は同じ lifecycle 境界から reinitialize するため、move-out 後の正当な replace / re-store は許可される。これは stdlib module 名の allowlist ではなく、Resource IR cell transition の typed event と CellTable の generic state update による Stage 6 compiler-core 境界整理である。

ISS-20260521T004808159Z-COLLECTION-SLOT-SUMMARIES-DO-NOT-TRA-2AA84347 は 2026-05-21 に修正した。collection slot lifecycle summary は、callee 内で発行された Event / Relocate / Merge / Loop だけを caller へ replay していたため、callee が owner parameter をそのまま返す identity / owner-preserving helper では、caller actual に既に存在する slot state が call output へ移らなかった。修正後は CollectionSlotLifecycleFunctionSummaryreturn_transfers を追加し、return value が parameter prefix であることを Resource IR place 関係から検出して typed summary fact として保持する。call site では raw alias canonicalization を通した上で actual argument prefix から call output prefix へ CollectionSlotStateTable::transfer_storage_prefix を適用する。これは stdlib function 名の個別証明ではなく、callee return place と parameter place の generic proof による owner-preserving slot state transfer であり、non-Copy collection API の owner recovery / error recovery を安全に進める前提である。

ISS-20260521T010410090Z-COLLECTION-SLOT-OWNER-TRANSFER-LIFEC-3C1056B2 は 2026-05-21 に修正した。collection slot lifecycle の owner-transfer event は payload value-flow proof をまだ持たないため、InitializeEmptyMoveOutReplaceReturnOldReplaceDropOld が non-Copy payload を扱う場合は OwnerTransferRequiresValueProof として拒否し、state-only annotation で owner state を生成・移動・置換できないようにした。Copy payload の state-only marker は維持するが、non-Copy collection API を public に広げるには、実際の payload consume / materialize / return place と同じ generic Resource IR proof に接続する必要がある。この positive support は ISS-20260520T152218366Z-NON-COPY-COLLECTION-PAYLOAD-SUPPORT--A6A88543 の Stage 6 残件として扱う。併せて collection slot の place 正規化は raw value origin を含む canonicalization ではなく owner-cell canonicalization に限定し、value move 後の storage dealloc が移動先 live slot を見落とさないようにした。

ISS-20260521T020307778Z-COLLECTION-SLOT-OWNER-TRANSFER-NEEDS-403A919A は 2026-05-21 に修正した。raw memory checker が non-Copy StoreValueMoveOutLoadedCellRawCellValueFlowFacts として CellTable に記録し、collection slot owner-transfer obligation が local fact を消費できる場合だけ InitializeEmpty / MoveOut / ReplaceReturnOld / ReplaceDropOld の state transition を許可する。fact は branch / loop / match merge で全 path 共通のものだけを残すため、片側だけの store/load で後続 lifecycle を証明することはできない。collection slot summary replay でも branch / loop / indirect call の候補ごとに CellTable を clone / merge し、summary path 片側の fact が別 path に漏れないようにした。これにより positive support は stdlib function allowlist ではなく generic Resource IR の raw cell value-flow proof に進んだ。ただし callee summary を跨ぐ certified proof と compiler-owned slot-drop lowering はまだ Stage 6 残件である。

ISS-20260521T025115696Z-COLLECTION-SLOT-SUMMARIES-NEED-CERTI-92379E7C は 2026-05-21 に修正した。CollectionSlotLifecycleSummaryOp::EventCollectionSlotLifecycleSummaryEventProof を追加し、callee 内で raw value-flow fact から証明済みの non-Copy owner-transfer だけを OwnerTransferValueFlow として summary に載せる。caller replay はこの certified proof を obligation と照合し、caller 側に同じ raw fact を再要求しない。一方、proof がない non-Copy lifecycle event は summary として信用しないため、stdlib helper 名の allowlist や shallow owner transfer へ戻らない。これにより direct call を跨ぐ non-Copy slot initialize / move-out は generic Resource IR proof に接続された。compiler-owned slot-drop lowering はまだ Stage 6 残件である。

ISS-20260521T050436552Z-SOURCE-LEVEL-NON-COPY-COLLECTION-SLO-D0BB9BAF は 2026-05-21 に修正した。source-level compiler-owned stdlib lowering では、region_ptr / mem_ptr_addr で作られた raw store/load fact と、collection_slot_* intrinsic の owner-cell target が同じ storage cell を指していても、raw address alias と explicit zero offset ([+0]) を跨いで value-flow proof が照合されていなかった。修正後は RawCellValueFlowFacts が alias-aware raw-cell candidates と zero-offset 正規化を使い、同じ raw cell に対する typed fact を collection slot owner-transfer/drop proof が消費できる。これは stdlib function allowlist ではなく Resource IR の generic proof であり、non-zero offset は同一 proof として扱わない。

ISS-20260521T054050076Z-SOURCE-LEVEL-DROPPABLE-COLLECTION-SL-7041CED9 は 2026-05-21 に修正した。手書き Resource IR で導入済みだった DropInitialized / ReplaceDropOld の loaded-value drop proof を、compiler-owned stdlib source lowering 経由でも regression 化した。raw store -> InitializeEmpty -> raw load -> actual drop -> DropInitialized と、raw load old -> actual drop old -> raw store new -> ReplaceDropOld は generic DropLoadedCell / StoreValue proof を消費して通る。一方、raw load だけで actual drop がない場合、または replacement new payload の raw store proof がない場合は typed refutation のまま残る。これにより Stage 6 の source-level collection slot proof は initialize / move-out だけでなく droppable cleanup / replacement まで production path に接続された。

ISS-20260521T055400560Z-SOURCE-LEVEL-COLLECTION-SLOT-PROOF-L-B5FB8CDA は 2026-05-21 に修正した。compiler-owned stdlib source から indexed collection slot を下げると、同じ off を raw store/load 用と lifecycle event 用に複数回 read するため、temporary root は tmp5 / tmp15 / tmp21 のように分かれる。修正後は raw cell value-flow fact と collection slot lifecycle target の symbolic storage offset を RawCellAddressAliases の scalar origin へ正規化し、同じ source scalar に由来する offset を同一 slot proof として扱う。一方、other_off = off + size_of<T> のように別 local へ移った offset は同一 proof にしない。これは Vec などの stdlib module allowlist ではなく、source lowering が生成した scalar alias fact、raw address alias、typed lifecycle event を generic Resource IR proof boundary で結び付ける Stage 6 correctness 修正である。

ISS-20260521T062752580Z-COLLECTION-SLOT-LIFECYCLE-LOWERING-I-653BBF1A は 2026-05-21 に修正した。Resource lowering coverage は raw memory や borrow/move の producer count を比較していたが、collection slot lifecycle producer は target place の coverage だけで、ResourceOp::CollectionSlotLifecycle / ResourceOp::CollectionStorageRelocate そのものの欠落を count mismatch として検出できなかった。修正後は ResourceCoverageCountsResourceCoverageKind に collection slot lifecycle / storage relocate を追加し、HIR 側は CollectionSlotLifecyclePrimitive enum で intrinsic を分類し、Resource IR 側は該当 ResourceOp を直接 count する。これにより non-Copy collection support の proof producer が lowering から消えた場合、stdlib helper 名の個別許可に退行する前に typed coverage diagnostic で検出できる。

ISS-20260521T064245727Z-COLLECTION-SLOT-BORROWREAD-LACKS-SOU-1999DF36 は 2026-05-21 に修正した。BorrowReadCollectionSlotLifecycleEvent と state transition には存在していたが、compiler-owned stdlib source lowering 経由で、initialized non-Copy slot を状態変更なしで読み、その後の raw load / MoveOut proof へ進めることを固定していなかった。修正後は source-level regression で raw store -> InitializeEmpty -> BorrowRead -> raw load -> MoveOut を通し、MoveOut 後の BorrowReadCollectionSlotLifecycleOp::BorrowReadCollectionSlotState::Moved を持つ typed refutation として拒否する。type argument / anchor mismatch は typecheck boundary が拒否するため、Resource IR 側は valid producer の state proof に集中する。

ISS-20260521T065624831Z-COLLECTION-SLOT-STATE-RETURN-SUMMARY-4591B626 は 2026-05-21 に修正した。owner-preserving fallible collection API では、失敗時に storage owner や item owner を Result::Err / 専用 error enum payload へ包んで caller に返す必要がある。既存の collection slot return summary は parameter をそのまま返す場合だけ slot state transfer を記録していたため、Err(storage) のような aggregate payload return では caller 側の match bind 後に live slot state が消える可能性があった。修正後は return value の source ResourceOp を辿り、enum / struct / tuple construct、branch / match value、local forwarding から parameter-relative source と return payload suffix を構成する。これは Result 名や stdlib function 名の allowlist ではなく、Resource IR の typed aggregate/control-flow model から導く汎用 proof boundary である。

ISS-20260521T091611468Z-COLLECTION-SLOT-LIFECYCLE-SUMMARY-CO-1DED6918 は 2026-05-21 に修正した。collection slot return-transfer 収集は owned enum payload match bind の entry state を構築していたが、summary event 収集は arm の ops を pre-match state のまま再帰していた。そのため callee が Result::Err(storage) などを match し、bound payload に対して CollectionSlotLifecycle::StorageDealloc や同種の lifecycle event を発行しても、event target が parameter payload suffix へ戻らず caller summary replay が effect を失う可能性があった。修正後は match arm entry-state 構築を共通 helper に切り出し、summary event / return-transfer の両方が raw alias、cell origin、collection slot state、function alias、pending realloc、variant state を同じ手順で bind local へ伝播する。これは Result や stdlib 関数名の個別証明器ではなく、ResourceOp::Match の typed semantics を generic collection slot summary proof に接続する Stage 6 compiler-core 境界整理である。

ISS-20260521T094024431Z-COLLECTION-SLOT-RETURN-SUMMARY-LOSES-5E121C4F は 2026-05-21 に修正した。Resource IR 本体 checker は ResourceCheckState alternatives により branch / match 後の callee alias と collection slot state の相関を保持していたが、collection slot return summary は merged CollectionSlotSummaryBuildState と flat な return_transfers / return_slots で return producer を逆追跡していた。そのため、then path だけで caller argument slot を initialize し、else path だけで identity callee を返すような indirect call で、then 側の live slot と else 側の return transfer が caller replay 時に合成され、実行不能な MaybeInitialized return slot が作られる可能性があった。修正後は CollectionSlotLifecycleReturnPath を追加し、path ごとの summary ops、return transfer、return slot を保持する。caller replay は通常の side-effect summary を適用しつつ、call output の slot state は pre-call state から return path ごとに再生して merge する。branch / match の never arm は selected ResourceOp を feasible arm ごとに評価する専用 control module へ分け、return output state 計算では diagnostics を出さない state-only replay を使う。これは stdlib helper 名や collection module 名の allowlist ではなく、ResourceOp::Branch / ResourceOp::Match / ResourceOp::IndirectCallFunctionAliasTableCollectionSlotStateTable を同じ feasible path で評価する generic Resource IR proof 修正である。

ISS-20260521T103746552Z-COLLECTION-SLOT-LIFECYCLE-PROOF-CHEC-E31C8D02 は 2026-05-21 に修正した。collection slot lifecycle event は slot-state precondition、drop proof、owner-transfer proof の複数条件を同時に満たした場合だけ state transition と proof consumption を進める必要があるが、修正前は ReplaceInitialized(DropOldOwner) の old payload drop proof を先に消費してから new payload store proof の不足を検出していた。そのため rejected event が slot state を進めない一方で proof state だけを部分変異させ、後続の valid DropInitialized が false DropRequiresElaboration になる可能性があった。修正後は proof satisfaction と proof consumption を分離し、CollectionSlotLifecycleProofPlan が全 obligation を検査してから CellTable clone 上で消費し、すべて成功した場合だけ original state へ commit する。これにより collection slot proof は event 単位で atomic になり、静的検査プログラム自体の失敗 recovery も typed proof transaction として扱える。

ISS-20260521T104926514Z-COLLECTION-SLOT-RETURN-VALUE-PRODUCE-51DC87E9 は 2026-05-21 に修正した。return path state evaluation は Branch / Match の Never value を実行不能 arm として除外していたが、return value producer tracing は同じ判定を使っていなかった。そのため手書き Resource IR や将来の lowering bug で Never value が parameter と同じ root/projection を持つと、実行不能 producer から parameter-relative return transfer を作り、caller output に impossible live slot を伝播し得た。修正後は return_value_is_never を shared predicate にし、path-sensitive collector と legacy flat return-transfer fallback の両方で Branch / Match producer tracing 前に Never value を除外する。これにより path-state selection と producer tracing が同じ feasible path model に揃い、stdlib helper 名ではなく Resource IR type/state に基づく証明境界を維持する。

ISS-20260521T105928164Z-COLLECTION-STORAGE-RELOCATE-LACKS-RA-BE2DCD3E は 2026-05-21 に修正した。ResourceOp::CollectionStorageRelocate は old storage prefix 配下の collection slot state を new storage prefix へ rekey できたが、その rekey が raw realloc success などの storage movement evidence と結び付いていなかった。修正後は PendingRawReallocs が realloc success path で certified raw storage relocation proof を保持し、CollectionStorageRelocate は owner-cell canonicalization 後の old / new storage pair に対応する proof がある場合だけ slot state を rekey する。proof 不足は StorageRelocateRequiresRawMoveProof として typed refutation になり、summary build は proof 付き relocate だけを CollectionSlotLifecycleSummaryRelocateProof::RawStorageRelocation として caller replay へ渡す。これにより collection storage grow/realloc は Vec や stdlib helper 名の個別許可ではなく、raw movement fact と collection slot lifecycle state を結ぶ generic Resource IR proof として扱われる。

ISS-20260521T112740338Z-COLLECTION-STORAGE-DEALLOC-LACKS-RAW-B31FE6FE は 2026-05-21 に修正した。CollectionSlotLifecycleEvent::StorageDealloc は live slot が残っていないことを確認していたが、backing raw storage が実際に dealloc されたことを証明せずに collection slot state を storage released へ進められた。修正後は RawMemoryOp::Dealloc 成功時だけ PendingRawReallocs に certified raw storage release proof を発行し、StorageDealloc は owner-cell canonicalization 後の storage に対応する proof を消費できる場合だけ state transition を commit する。proof 不足は StorageDeallocRequiresRawReleaseProof として typed refutation になり、summary build は proof 付き release だけを caller replay へ渡す。これは Vec / stdlib helper 名の個別許可ではなく、raw release fact と collection slot lifecycle state を結ぶ generic Resource IR proof である。

ISS-20260521T114146610Z-COLLECTION-SLOT-DROP-TRAVERSAL-NEEDS-60837C0B は 2026-05-21 に修正した。single-slot DropInitialized / DropLoadedCell proof だけでは、dynamic len / symbolic offset / loop traversal を通じて storage 配下の initialized non-Copy slots 全体を actual drop したことを表せなかった。修正後は ResourceOp::CollectionSlotDropTraversal を追加し、storage prefix 配下の initialized collection slot を列挙して、各 slot に loaded-value drop proof を要求する。traversal は CellTable / CollectionSlotStateTable clone 上で atomic に検査し、raw load だけでは cleanup proof としない。callee 側で証明した traversal は CollectionSlotLifecycleSummaryOp::DropTraversal と certified proof として summary replay へ渡し、caller 側では non-Copy raw cell moved state も同時に進める。片 branch だけの cleanup は MaybeInitialized として残るため、StorageDealloc を証明しない。これは vec_freehashmap_free の allowlist、cleanup bool、個別 module proof ではなく、Resource IR の generic traversal proof と enum / match による Stage 6 compiler-core 境界整理である。

ISS-20260521T143810964Z-COLLECTION-SLOT-DROP-TRAVERSAL-SUMMA-131D4BA0 は 2026-05-21 に修正した。旧 summary build は callee 側の collection slot table が空でも CollectionSlotDropTraversalCertifiedLoadedValueDrops として summary に載せられたため、marker-only helper call が caller 側の initialized non-Copy slots を実際の loaded-value drop なしに dropped 扱いへ進める可能性があった。修正後は DropTraversal summary が source-derived certified slot target の一覧を持ち、summary replay は storage 全体を再列挙せずその一覧だけを replay する。空の traversal は summary を生成せず、caller の残存 live slot は storage dealloc 時に拒否される。これにより collection-wide summary proof は裸の bool/marker ではなく、Resource IR が実際に証明した slot target payload として扱われる。

ISS-20260521T145809160Z-SYMBOLIC-COLLECTION-SLOT-DROP-TRAVER-3D619183 は 2026-05-21 に修正した。CollectionSlotDropTraversalStorageDealloc は explicit finite slot entry を列挙できるが、ResourceOffset::Symbolic / ScaledSymbolic / Unknown を含む entry は dynamic range 全体の forall proof ではない。修正後は storage prefix 配下に symbolic / unknown offset slot が残る場合、RangeProofRequired の typed refutation で traversal / storage release を拒否する。これにより一つの抽象 slot proof を initialized_len 全体の cleanup proof として扱う unsafe shortcut を閉じた。positive な dynamic initialized range traversal は、source loop、range bound、element stride、drop coverage を結ぶ typed range proof として別途設計する必要があり、non-Copy collection payload support の Stage 6 残件として扱う。

ISS-20260521T151802959Z-COLLECTION-SLOT-DROP-TRAVERSAL-LACKS-B557D89A は 2026-05-21 に修正した。CollectionSlotDropTraversal が storage と expected type だけを持つ設計では、source が持つ initialized_len / initialized count と traversal proof を接続できず、symbolic slot を安全側で拒否した後に positive proof へ進めなかった。修正後は source intrinsic collection_slot_drop_traversal<T>(storage, initialized_count) にし、typecheck 境界で count が i32 であることを検査し、Resource IR / summary build / summary translate / summary replay / coverage / dump まで initialized_count: Place を通す。known slot は offset / element_stride < initialized_countRawCellAddressAliases の i32 relation fact で証明できる場合だけ traversal が進む。これは stdlib helper 名や module 名の allowlist ではなく、source lowering が生成した typed scalar fact と collection slot state を Resource IR の generic proof boundary で結ぶ前提整備である。symbolic slot の positive forall proof は引き続き non-Copy collection payload support の残件であり、個別 collection module ごとの証明器ではなく汎用 range proof として実装する。

ISS-20260521T155723411Z-SYMBOLIC-COLLECTION-SLOT-DROP-TRAVER-A919B9B0 は 2026-05-21 に修正した。前段で initialized_count operand は Resource IR に通ったが、ResourceOffset::Symbolic / ScaledSymbolic は typed scalar fact が揃っていても常に RangeProofRequired だった。修正後は symbolic range proof を known offset proof と分離し、known == 0scale == element_strideindexNonNegativeindex < initialized_countRawCellAddressAliases の typed fact として証明できる場合だけ CollectionSlotDropTraversal を通す。fact 欠落、unknown offset、stride 不一致、zero-sized payload の symbolic offset は引き続き拒否する。これは full dynamic initialized range の forall coverage を完了したものではなく、tracked symbolic slot が source-derived range fact と actual loaded-value drop proof を持つ場合にだけ generic proof boundary へ進める段階である。full range traversal は引き続き parent issue の残件として、個別 stdlib module proof ではなく Resource IR の range certificate / loop coverage proof として設計する。

ISS-20260521T162422167Z-COLLECTION-SLOT-SUMMARY-BUILD-DROPS--7B32F4E0 は 2026-05-21 に修正した。callee 本体の initialized checker は Branch / Loop の ResourceConditionFact を truthy / falsey path に反映していたが、collection slot summary build は nested summary collection を pre-branch state から行っていた。そのため 0 <= i && i < initialized_count のような typed range fact が callee 本体の CollectionSlotDropTraversal では有効でも、summary certification では消えていた。修正後は Branch の then / else summary state に condition fact を反映し、Loop では condition_ops 適用後の state に truthy fact を反映して body summary を収集する。これは stdlib helper 名ではなく、Resource IR の制御構造 fact を generic summary proof に渡す Stage 6 compiler-core 修正である。

ISS-20260521T163555637Z-COLLECTION-SLOT-SUMMARY-CANNOT-INSTA-02D58E62 では、CollectionSlotLifecycleSummaryPlace と collection slot return summary の suffix を raw PlaceProjection ではなく CollectionSlotLifecycleSummaryProjection / CollectionSlotLifecycleSummaryOffset へ移した。ResourceOffset::Symbolic / ScaledSymbolic に埋め込まれた Place は parameter-relative summary place として再帰的に保持し、parameter に相対化できない operand は summary 化しない。wrapper summary composition でも callee suffix を caller argument へ instantiate してから wrapper parameter-relative に再要約するため、stale callee local が caller replay へ混入する経路を閉じた。

ISS-20260522T021811244Z-RAW-INITIALIZATION-SUMMARIES-KEEP-CA-01C86BF8 は 2026-05-22 に修正した。collection slot summary は typed projection へ移っていたが、raw initialization summary の param_cells / param_byte_ranges / variant param facts は raw PlaceProjection のままで、callee parameter を指す symbolic offset が caller actual へ置換されず Resource IR state に残り得た。修正後は projection model を SummaryPlace / SummaryProjection / SummaryOffset として共通化し、raw initialization summary も parameter-relative に相対化できる suffix だけを発行する。caller apply と variant pending state は summary suffix を caller arguments で concrete projection に instantiate してから cell / byte-range state へ入れる。これは MemPtr<T>RegionToken<T> を型だけで同一視する shortcut ではなく、source-derived parameter relation を enum / match による汎用 projection modelへ載せる Stage 6 compiler-core 修正である。

ISS-20260521T171652639Z-RESOURCE-IR-DROP-TRAVERSAL-SUMMARIES-E5AE01EF は 2026-05-21 に修正した。finite certified_slots だけでは caller 側の storage prefix 配下にある initialized slot 全体を表せないため、CollectionSlotLifecycleSummaryDropTraversalCoverageCertifiedSlotsForallInitializedRange の enum に分け、full-range cleanup は CollectionSlotInitializedRangeDropTraversalCertificate を持つ場合だけ replay する。certificate producer は i = 0i < initialized_count、strict i += 1、body prefix の raw load / actual loaded-value drop witness、body 全体の storage/count preservation、increment 後の index preservation を同時に確認する。caller replay は certificate の element stride を storage_size_bytes(expected_ty) と照合し、既存の generic range traversal checker に SummaryCertified(DropLoadedValue) proof を渡す。これは per-slot symbolic range proof を全域証明へ昇格するものではなく、stdlib module 名や helper 名の allowlist でもない。証明 mode は文字列や bool sentinel ではなく enum / struct / exhaustive match で管理する。

ISS-20260521T174248092Z-DROP-TRAVERSAL-SUMMARY-UPGRADES-PER--574B05E7 は同日監査で発見した soundness regression である。ISS-20260521T171652639Z の最初の実装では、callee 側で「特定の symbolic slot が 0 <= i < initialized_count を満たす」ことを full-range summary の生成条件にしていた。しかし per-slot range proof は、その slot を訪問したことの証明であって、callee が 0..initialized_count 全域を走査した証明ではない。修正後は range proof が必要な symbolic slot を含む traversal summary は生成しない。未使用の full-range replay variant は dead code として残さず削除した。source loop / iterator / traversal coverage を表す typed full-range certificate が入るまでは、証明不足の full-range cleanup を caller に伝播しない。

ISS-20260521T180048059Z-DROP-TRAVERSAL-SUMMARY-KEEPS-SINGLE--5A7D4C1C は 2026-05-21 に修正した。ForallInitializedRange を削除した後、CollectionSlotLifecycleSummaryDropTraversalCoverageCertifiedSlots だけを持つ単一 variant wrapper として残っていた。これは実装上の証明 mode が実際より一般に見え、後続で typed certificate なしの full-range mode を再導入しやすくするため不適切だった。修正後は CollectionSlotLifecycleSummaryOp::DropTraversalcertified_slots field を直接持ち、summary build / translate / replay は有限 certified slot payload だけを扱う。full-range summary を再導入する場合は、typed traversal coverage certificate の producer と replay consumer を同じ設計で追加する。

ISS-20260521T191505124Z-DROP-TRAVERSAL-FULL-RANGE-CERTIFICAT-9BDAB140 は 2026-05-22 に修正した。current main では ForallInitializedRange を typed loop-induction certificate として再導入しているが、初期実装では certificate を CollectionSlotSummaryBuildState に蓄積した後、loop と CollectionSlotDropTraversal の間に storage / initialized_count / slot lifecycle / alias-relevant operation が入っても失効しなかった。修正後は DropTraversalRangeCertificateEffect::{Preserves, Invalidates}ResourceOp の exhaustive match で certificate lifetime を分類し、関係 state に触れる operation の本体検査後に既存 certificate を破棄してから、その loop で生成された新しい certificate だけを post-loop state に登録する。無関係な scalar temporary は lifetime を維持するが、storage/count assignment、storage 配下の lifecycle event、raw memory mutation、call/relocate/traversal は失効条件になる。これにより full-range cleanup summary は stdlib helper 名や collection module allowlist ではなく、source loop が証明した Resource IR state に結び付いた typed evidence として扱われる。

ISS-20260521T132527293Z-SOURCE-LEVEL-COLLECTION-DROP-TRAVERS-24EF497F は 2026-05-21 に修正した。ResourceOp::CollectionSlotDropTraversal と raw release proof は手書き Resource IR では通っていたが、compiler-owned stdlib source path から raw store / InitializeEmpty / raw load / actual drop / collection_slot_drop_traversal / dealloc_raw / collection_slot_storage_dealloc が一続きで通る positive regression がなかった。修正後は &RegionToken<LocalOwner> を anchor にする source-level fixture で 2 slot 分の cleanup と storage release を通し、lowering に CollectionSlotDropTraversalRawMemoryOp::DeallocStorageDealloc が typed op として残ることも確認する。これは特定の collection helper を許可する policy ではなく、source lowering、raw alias、loaded-value drop proof、storage release proof を汎用 Resource IR proof boundary で接続できているかを固定する Stage 6 regression である。

ISS-20260521T133925178Z-COLLECTION-SLOT-OWNER-TOKEN-INTRINSI-79B2D12D は 2026-05-21 に修正した。collection slot lifecycle intrinsic の owner-token anchor は proof marker の storage identity を指すだけであり、source-level expression として RegionToken<T> を値渡しすると marker 呼び出し自体が owner move になっていた。修正後は CollectionSlotLifecycleAnchor::OwnerTokenOwnerTokenAnchorAccess::{Borrowed, ByValue} を持ち、typecheck 境界で by-value owner-token anchor を拒否する。storage dealloc、storage relocate、drop traversal は &RegionToken<T> anchor だけを許可し、raw MemPtr<T> anchor は slot-offset lifecycle marker 用に維持する。これにより proof marker は owner transfer ではないという責務が型検査境界で明確になり、静的検査実装側も bool ではなく enum / match で access kind を扱う。

ISS-20260521T135336921Z-COLLECTION-SLOT-LIFECYCLE-TYPE-CHECK-126AADF5 は 2026-05-21 に修正した。collection slot lifecycle の state transition は、owner-transfer proof や drop proof とは異なり、payload 型を exact TypeId で比較していた。そのため generic helper summary が .T を expected type として持つ場合に、caller 側の concrete payload slot と同じ proof boundary で照合できない可能性があった。さらに CollectionSlotStateTable は slot entry key に Place.ty を含めていたため、ReplaceInitialized<Old, New> の後に同じ storage + offset の slot を new payload type の target から参照できない可能性があった。修正後は TypeCtxtype_pattern_matches を lifecycle transition に渡し、generic pattern と concrete payload を同じ型照合で扱う。slot table の lookup / update は root + projections を identity とし、payload type は CollectionSlotState 側に保持する。source-level collection_slot_replace_return_old も raw load proof と raw store proof による positive regression として固定した。これは stdlib helper 名や collection module 名の allowlist ではなく、Resource IR の typed lifecycle state と generic type-pattern proof を接続する Stage 6 compiler-core 修正である。

ISS-20260521T141951855Z-COLLECTION-SLOT-LIFECYCLE-MODULE-EXC-964028BB は 2026-05-21 に修正した。collection slot proof の拡張により collection_slot_lifecycle.rs と collection slot state table 周辺が再び肥大化し、Resource IR checker responsibility policy が検出する状態になっていた。修正後は lifecycle enum/refutation model、state transition、type-pattern regression、storage release regression、slot identity helper、storage release precondition、merge tests をそれぞれ独立 module へ分けた。これは静的検査の証明能力を増やす変更ではないが、Stage 6 の開発方針である「検査プログラム自体の誤りも見つけやすくする」ために必要な構造整理であり、nodesrc/test_resource_checker_responsibility.js は新規 file をすべて監視対象に含めて上限を緩めない。

したがって、この計画の完了条件は変更しない。旧 checker の special-case や旧 drop walker を戻して現状維持するのではなく、残る raw-memory-backed stdlib public API、owner token、collection storage state を Resource IR / enum / match の設計へ移す。

完了条件

この計画は次を満たした時点で完了とする。

  1. typecheck.rsmove_check.rs の主要責務が module 境界へ分離されている。
  2. Resource IR が typed HIR 後の正式な検査入力になっている。
  3. move / borrow / lifetime / initialized / drop obligation / raw provenance が Resource IR 上で共有状態として検査される。
  4. MemPtr は non-owning pointer に限定され、owner token と initialized cell state が別表現になっている。
  5. raw memory primitive は public pure surface から閉じられ、必要な内部効果だけが surface pure へ fold される。
  6. stdlib collection / string / self-host buffer が safe public discipline と compiler Resource IR の責務分割に従う。
  7. 旧 HIR 個別 summary を削除しても、既存 memory safety / type safety / effect safety regression が通る。
On this page