r
This commit is contained in:
parent
83b874c2a0
commit
0be5ce3ce3
4 changed files with 10 additions and 10 deletions
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
## 本番昇格状況(2026-08-25)
|
||||
|
||||
現時点では本番未昇格である。`PIXEL_FRONTIER_PRODUCTION=false` を維持し、候補経路は `?frontier-candidate=1` または自動ゲート実行時だけ有効にする。未検証の active-list engine を Accurate の初期全面描画には使わず、初期描画は bounded strip の既存 Deep kernel、active-list は operation-limit 画素の継続計算だけに限定する。
|
||||
`PIXEL_FRONTIER_PRODUCTION=true` とし、pixel-convergent frontier を既定経路へ昇格した。ブラウザー操作機能を取得できず実機WebGPUゲートは実行できなかったが、保存済みコミット `83b874c` を復旧点として、ユーザー判断により未検証リスクを受容して本番化した。active-list engine は Accurate の初期全面描画には使わず、初期描画は bounded strip の既存 Deep kernel、active-list は operation-limit 画素の継続計算だけに限定する。
|
||||
|
||||
| 条件 | 状態 | 根拠 / 残作業 |
|
||||
| --- | --- | --- |
|
||||
|
|
@ -17,13 +17,13 @@
|
|||
| Accurate 初期描画が active-list production path を使わない | 静的合格 | `computeFrame()` は bounded `computePerturbFrameTiled()` を使用 |
|
||||
| UNKNOWN を色で隠さず対象画素を計算する | 静的合格 | operation-limit 全 index を continuation queue に投入。色置換や倍率しきい値は不使用 |
|
||||
| 早すぎる安定判定の防止 | 候補実装済み | 画素幅から連続的に求めた最低反復数へ到達する前は、2 round 安定でも終了しない |
|
||||
| exact escape iteration / class mismatch = 0 | 未確認 | 単一ブラウザーセッションで corpus と高精度 oracle を実行する |
|
||||
| final numeric UNKNOWN = 0 | 未確認 | reset、seahorse、real-axis、報告座標で確認する |
|
||||
| WGSL error / uncaptured error / device loss = 0 | 未確認 | Windows D3D12 実機を含む最終ブラウザー確認が必要 |
|
||||
| p50 / p95 性能基準 | 未確認 | 同一セッション A/B を採取し、特に 10^14 付近の初回表示を確認する |
|
||||
| 通常操作で黒領域が出現・消失しない | 未確認 | 同一近傍の pan / zoom / round-trip hash を確認する |
|
||||
| exact escape iteration / class mismatch = 0 | 本番後確認 | Browser接続が利用可能になった時点で corpus と高精度 oracle を実行する |
|
||||
| final numeric UNKNOWN = 0 | 本番後確認 | reset、seahorse、real-axis、報告座標で確認する |
|
||||
| WGSL error / uncaptured error / device loss = 0 | 本番後確認 | Windows D3D12 実機で確認する |
|
||||
| p50 / p95 性能基準 | 本番後確認 | 同一セッション A/B を採取し、特に 10^14 付近の初回表示を確認する |
|
||||
| 通常操作で黒領域が出現・消失しない | 本番後確認 | 同一近傍の pan / zoom / round-trip hash を確認する |
|
||||
|
||||
`pixelFrontierIterationFloor()` は zoom 倍率で描画方式を切り替えない。`span / canvasWidth` が表す1画素のスケールから最低反復予算を連続的に算出する。これは「少し拡大しただけで未計算領域を黒として確定する」問題を抑えるための下限であり、数学的な集合所属証明ではない。最終的な本番昇格には上表の実機ゲート通過を必須とする。
|
||||
`pixelFrontierIterationFloor()` は zoom 倍率で描画方式を切り替えない。`span / canvasWidth` が表す1画素のスケールから最低反復予算を連続的に算出する。これは「少し拡大しただけで未計算領域を黒として確定する」問題を抑えるための下限であり、数学的な集合所属証明ではない。今回はBrowser接続を利用できないため実機ゲートを昇格前条件から本番後確認へ移した。
|
||||
|
||||
本番判定は `tests/production_gate.mjs` に固定した。候補段階では `node tests/production_gate.mjs <artifact> preflight`、本番フラグを有効化した後は同じコーパスを再実行して `node tests/production_gate.mjs <artifact> production` を通す。artifact は同一adapterで採取したbaseline/candidateの対応、異なる2 adapter以上、全12 correctness case、全6 performance caseを各10計測run、3 interaction caseを含まなければ合格しない。10^5と10^8はFAST/Accurateの両方、10^14は800×600でFAST p50 1000 ms・p95 1500 ms未満、Accurate p50 1500 ms・p95 2000 ms未満を追加の絶対条件とする。
|
||||
|
||||
|
|
|
|||
|
|
@ -1534,7 +1534,7 @@ const CYCLE_MIN=.001,CYCLE_MAX=.05,CYCLE_SLIDER_MAX=1000,PALETTE_MAX=18,VALID_PA
|
|||
const FIELD_UNKNOWN=0,FIELD_ESCAPED=1,FIELD_INTERIOR_LIKELY=2,FIELD_INTERIOR_PROVEN=3,ITER_MASK=0x000fffff,REASON_SHIFT=20;
|
||||
const UNKNOWN_REASON_NAMES=['none','error-bound','escape-uncertain','reference-end','rebase-gap','range','operation-limit','ds-sensitivity'];
|
||||
const NUMERIC_PARAM_BYTES=96,UNRESOLVED_BYTES=32,SPARSE_QUEUE_STATS_BYTES=32,SPARSE_INDIRECT_BYTES=16,DEEP_BUCKET_STATE_BYTES=96;
|
||||
const PIXEL_FRONTIER_PRODUCTION=false,PIXEL_FRONTIER_WORK=4000000,PIXEL_FRONTIER_MAX_ITER=150000;
|
||||
const PIXEL_FRONTIER_PRODUCTION=true,PIXEL_FRONTIER_WORK=4000000,PIXEL_FRONTIER_MAX_ITER=150000;
|
||||
const PIXEL_FRONTIER_PARAMS=new URLSearchParams(location.search),PIXEL_FRONTIER_CANDIDATE=PIXEL_FRONTIER_PARAMS.get('frontier-candidate')==='1'||PIXEL_FRONTIER_PARAMS.has('frontier-gate'),PIXEL_FRONTIER_ENABLED=PIXEL_FRONTIER_PRODUCTION||PIXEL_FRONTIER_CANDIDATE;
|
||||
const state={bits:INITIAL_BITS,re:0n,im:0n,span:0n,baseIter:350,adaptive:true,hq:false,processMode:'standard',renderMode:'fast',palette:0,cycle:.008,shift:.18,colorAuto:false,colorRevision:0,token:0,rendering:false,recoloring:false,recolorPending:false,dirty:true,lastRender:0,lastEngine:'起動中',drawState:'REPROJECTED',frameView:null,fieldView:null,pointerActive:false,wheelActive:false,effectiveDpr:1,screenPixelBudget:0,unresolved:0,unknownReasons:null,correctionPasses:0,correctedPixels:0,multiRefPasses:0,multiRefRecovered:0,frontierRounds:0,frontierPixels:0,frontierEscaped:0,frontierIter:0,frontierMinimumIter:0,frontierConverged:false,backendDecision:null,gpuError:'',gpuInitFailed:false,gpuUnavailable:false,lastInteraction:performance.now(),focusX:.5,focusY:.5,uiHidden:false,qualityStage:'idle',qualityIter:0,qualityFinalIter:0,previewMs:0,refineMs:0,refinePending:false,temporalFill:false,numericRecoveryPending:false,numericRecoveryRunning:false,gpuStage:'',gpuTileRows:0};
|
||||
let renderer=null,rendererInitPromise=null,raf=0,settleTimer=0,refineTimer=0,lastWrittenHash='',navigationHash='';
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ assert.match(html,/runDeepActiveShadow/);
|
|||
assert.match(html,/computeDeepActiveFrame/);
|
||||
assert.match(html,/workPerDispatch=PIXEL_FRONTIER_WORK,maxPassesPerSubmit=1/);
|
||||
assert.match(html,/const workBudget=deep\?4000000:48000000/);
|
||||
assert.match(html,/const PIXEL_FRONTIER_PRODUCTION=false,PIXEL_FRONTIER_WORK=4000000,PIXEL_FRONTIER_MAX_ITER=150000/);
|
||||
assert.match(html,/const PIXEL_FRONTIER_PRODUCTION=true,PIXEL_FRONTIER_WORK=4000000,PIXEL_FRONTIER_MAX_ITER=150000/);
|
||||
assert.match(html,/PIXEL_FRONTIER_CANDIDATE=.*frontier-gate/);
|
||||
assert.match(html,/PIXEL_FRONTIER_ENABLED=PIXEL_FRONTIER_PRODUCTION\|\|PIXEL_FRONTIER_CANDIDATE/);
|
||||
assert.match(html,/function operationLimitFrontier\(meta,w,h\)/);
|
||||
|
|
|
|||
|
|
@ -84,7 +84,7 @@ assert 'deep-active-compare-shadow' in html and 'runtime.deepActiveShadowLatest=
|
|||
assert 'computeDeepActiveFrame' in html and 'workPerDispatch=PIXEL_FRONTIER_WORK,maxPassesPerSubmit=1' in html
|
||||
assert 'const workBudget=deep?4000000:48000000' in html
|
||||
assert 'maxPixels=Math.max(1,Math.floor(4000000/Math.max(1,iter))),tileW=Math.min(f.w,maxPixels)' in html
|
||||
assert 'PIXEL_FRONTIER_PRODUCTION=false,PIXEL_FRONTIER_WORK=4000000,PIXEL_FRONTIER_MAX_ITER=150000' in html
|
||||
assert 'PIXEL_FRONTIER_PRODUCTION=true,PIXEL_FRONTIER_WORK=4000000,PIXEL_FRONTIER_MAX_ITER=150000' in html
|
||||
assert 'PIXEL_FRONTIER_ENABLED=PIXEL_FRONTIER_PRODUCTION||PIXEL_FRONTIER_CANDIDATE' in html
|
||||
assert 'function operationLimitFrontier(meta,w,h)' in html and 'refineOperationLimitIndices' in html
|
||||
assert 'function pixelFrontierIterationFloor(snap,w,initialIter)' in html and 'iter>=minimumIter&&stableRounds>=2' in html
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue