11. 受入条件うけいれじょうけんと検証けんしょう
方針ほうしん
仕様しよう・データ・実装じっそう・実行結果じっこうけっかを区別くべつする。schemaの形式整合けいしきせいごうだけで言語げんごが完成かんせいしたことにしない。正例せいれい、誤例ごれい、境界きょうかい、変換前後へんかんぜんご、異ことなる実装じっそうの比較ひかくを受入条件うけいれじょうけんとする。
1. 必須ひっすの試験群しけんぐん
X01: 外部がいぶworkspace/repositoryの新言語しんげんごがfoundationを変更へんこうせず公開こうかいAPIで解析かいせき・schema・source/Origin・診断しんだんを扱あつかい、Rust/nativeとNDF/実じつprocess providerで意味結果いみけっか・失敗しっぱい・停止ていしが一致いっちする。foundation単独たんどくの配布はいふ/build/test/conformanceとdomainへのproduction/build逆依存不在ぎゃくいぞんふざいを検査けんさする。詳細しょうさいは22章しょう。
X02: Rust source APIの互換性ごかんせいとportable schema/signatureの互換性ごかんせいを独立どくりつした旧版きゅうはんconsumer・不正例ふせいれい・互換更新ごかんこうしんで検査けんさする。単たんなるdigest差分さぶんやpath依存いぞんの成功せいこうを独立どくりつリリース検証けんしょうへ読よみ替かえない。詳細しょうさいは22章しょう。
G01: Grammar自身じしんをseedで読よみ、compileしたpackageとseedの意味正規形いみせいきけいが一致いっち。
G02: declarative readerとRust direct readerの結果けっか・消費範囲しょうひはんい・viewが一致いっち。
G03: 空反復くうはんぷく、進捗しんちょくなし再帰さいき、未定義みていぎreader、shape衝突しょうとつ、provider署名違反しょめいいはんを正ただしいcodeで拒否きょひ。
G04: quoted属性内ぞくせいないの
>を含ふくむAngleTag、動的どうてきdelimiter、部分入力ぶぶんにゅうりょくのNeedMore、commit/no-matchの差さを検査けんさ。G05: native provider / NDF loopback / 別べつprocess providerから同おなじ結果けっか。
P01: prefixのserialize/parseで木きが同おなじ。cons/nilを含ふくむ全ぜんconstructorを網羅もうら。Numberの有限十進制約ゆうげんじっしんせいやく、任意有理数にんいゆうりすうからの式構築しきこうちく、著者ちょしゃのFrac保存ほぞんも検査けんさする。
P02: Doc→Math→DocとDoc→Circuitの復帰直後ふっきちょくごのhost tokenを読よみ過すぎない。
P03: headのarityを既読きどくの子この値あたいで変更へんこうできない。局所きょくしょschema更新こうしんproviderは既読情報きどくじょうほうだけ利用りよう。
P04: Recover parseがMissing/Unparsedを保持ほじし、未知みちarityを0としない。
D01: sentence literalとprefix構築こうちくが意味正規形いみせいきけいで等ひとしい。
D02: ネストしたruby/anno、多段ただんnote、全ぜんescape、空からpart、閉とじ忘わすれを検査けんさ。
D03: paragraphの深ふかさとparallelのsentence対応たいおうが独立どくりつ。重複ちょうふくlanguageとparagraph variantは拒否きょひ。
D04: 前方ぜんぽうlabel、重複ちょうふくlabel、未定義みていぎref、renameの捕捉検査ほそくけんさ。
D05: HTMLにユーザー由来ゆらいscriptが出でず、Doc paragraphのネストが正ただしい構造こうぞうで出力しゅつりょくされる。Markup文字集合違反もじしゅうごういはんの拒否きょひ、
]]>のescape、CRと属性ぞくせいTAB/LF/CRの保存ほぞんを検査けんさする。
M01: 1/2+1/3=5/6、0.1+0.2=3/10、大整数だいせいすうを丸まるめず計算けいさん。
M02: matrix形状違反けいじょういはん、次元不一致じげんふいっち、0除算じょざん、非整数指数等ひせいすうしすうとうを仕様通しようどおり分類ぶんるい。
M03: let/sumのscope、外側そとがわと内側うちがわの同名どうめい、free symbol、notation-onlyのSymbolic。
M04: すべてのMath constructorをMathMLへ描画びょうが。弱よわい子この括弧かっこ、sub/powの結合けつごう、source式保存しきほぞん。mspaceの単位付たんいつき非負ひふem長ながさと無効値むこうち、Markupの文字制約もじせいやくとXML escapeを検査けんさする。17章しょうの純粋じゅんすいTeX変換へんかんの忠実性ちゅうじつせい・escape、生成時せいせいじKaTeX、独立どくりつMathML fallbackと診断しんだん、macro独立性どくりつせい、出力検査しゅつりょくけんさ、資源上限しげんじょうげんとStopped保持ほじも要求ようきゅうする。host能力のうりょくのないWASIでは明示的めいじてきMathML経路けいろを、対応たいおうhostでは実じつKaTeX経路けいろを実行じっこうする。
C01: half-adderを全ぜん4入力にゅうりょく、adderは小幅こはばの全入力ぜんにゅうりょくで確認かくにん。
C02: 複数ふくすうstateの同時更新どうじこうしん、testごとのreset、pre-edge出力しゅつりょくを検査けんさ。initialはPreparedNetlistを受うけてslot順じゅんの初期値しょきちを返かえす。
C03: 未定義みていぎsignal、重複ちょうふくdriver、幅違反はばいはん、組合くみあわせloop、再帰さいきinstantiationを拒否きょひ。
C04: child moduleのstateを介かいしたfeedbackを組合くみあわせloopとして誤拒否ごきょひしない。
C05: instanceを2個作こつくればstateが独立どくりつ。wire参照さんしょうは共有きょうゆう。
C06: vector evaluatorと独立どくりつしたNOR evaluatorの複数ふくすうtick一致いっち。4種しゅのnodeとnextBits/outputBitsのsink参照さんしょう、長ながさ・bit順じゅんを検査けんさする。
E01: 日本語にほんご/補助平面文字ほじょへいめんもじ/CRLFにおけるUTF-8/16/32の位置変換いちへんかん。
E02: SentenceLiteralの内部ないぶを正確せいかくにハイライトし、外側そとがわでは1tokenを維持いじ。
E03: definitionの全範囲ぜんはんいとname範囲はんい、対応文関係たいおうぶんかんけいとdefinitionの区別くべつ。
E04: 更新後こうしんごに古ふるいdiagnostic/renameを適用てきようしない。
E05: 増分解析ぞうぶんかいせきと全解析ぜんかいせきで意味いみ・診断しんだん・参照さんしょう・位置いちが一致いっち。
E06: code表示ひょうじが不正ふせい/非停止ひていしのguestをlower・意味いみcheck・evaluateしない。Doc自身じしんのCodeもForeignSyntaxのまま表示ひょうじする。
W01: NDFの全ぜんvariant roundtrip、未知みちtag、非ひcanonical整数せいすう、負ふzero、分母ぶんぼ0、壊こわれた参照さんしょうの拒否きょひ。field arrayの順序交換じゅんじょこうかんでschema digestが変かわり、名前付なまえつきvariant mapのkey順じゅんだけの交換こうかんでは変かわらないことを検査けんさする。
W02: nativeとwire経路けいろで一致いっち。Complete/Invalid/Stopped/Awaitを網羅もうら。
W03: continuationの誤用ごよう、未知みちoperation、schema mismatch、過大かだいframeを拒否きょひ。
A01: workspace DAG、依存許可集合いぞんきょかしゅうごう、coreのno_stdを検査けんさ。
A02: native x86_64/aarch64、wasm32-wasip2、wasm32-unknown-unknownでbuildし、利用可能りようかのうなrunnerで同一どういつgoldenを実行じっこう。
A03: runner不在ふざいを「テスト成功せいこう」にしない。CIの対応たいおうrunnerを設定せっていして完了かんりょうにする。
A04: typed errorsのcatalog、診断しんだんstage/位置いち、resource上限じょうげんとcancelを検査けんさ。sourceBytes超過ちょうかはUTF-8 byte数すうで判定はんていしStopped(SourceLimit)を返かえす。
U01: TEAのinit/update/view/subscriptionsが決定的けっていてきで作用さようを直接実行ちょくせつじっこうせず、native/WASI/browserおよび別実装べつじっそうreplayでModel/Cmd/Viewの意味いみが一致いっちする。
U02: 全要求ぜんようきゅうidentityの照合しょうごうにより応答逆転おうとうぎゃくてん、close/reopen、profile/provider/options/resources変更後へんこうごの旧結果きゅうけっかを拒否きょひする。
U03: cancel、停止期限ていしきげん、Worker terminate/recreate、epoch更新こうしんと再準備さいじゅんびを検査けんさ。終了後しゅうりょうごの完了応答かんりょうおうとうを採用さいようしない。
U04: document閉鎖へいさ・再読込さいよみこみ、worker/session epoch、listener/timer再登録さいとうろくと解除かいじょで旧処理きゅうしょりや二重購読にじゅうこうどくが漏もれない。
U05: 日本語にほんごIME、補助平面文字ほじょへいめんもじ、CRLF、選択せんたく、undo/redo、format/rename transaction、programmatic edit feedbackとsnapshot競合きょうごうで入力にゅうりょくを失うしなわない。
U06: Grammarと対象たいしょうDSLの2editorを提供ていきょうし、追加ついかの文法ぶんぽう・束縛そくばく・表示定義ひょうじていぎだけで共通きょうつうhighlight/definition等とうを得える。TypeScript再実装さいじっそうを不要ふようにし、外部がいぶprovider不足ふそくは明示めいじする。
U07: preview隔離かくり、未承認みしょうにんprovider拒否きょひ、source表示ひょうじからの非評価ひひょうか、保存ほぞん・読込よみこみ・downloadの成功せいこう/拒否きょひ/容量超過ようりょうちょうか、未保存編集みほぞんへんしゅうの保護ほごを検査けんさする。
U08: UI/Worker型がたのschema closure、native/Wasm/codecと別実装べつじっそうreplayの対応たいおう、core/domain/engineへのUI依存逆流いぞんぎゃくりゅうがないことを検査けんさする。
S01: SiteConfigの /NEPL3/ と別べつの非ひroot baseでトップ/docs/Playground/assets/Worker/Wasm/rustdoc/例れいmanifestを生成せいせい・ロードし、deep linkと再読込さいよみこみを検査けんさする。
S02: docs・例れいmanifest・runtime・profile・assetsの版ばんを照合しょうごうする。cache混在こんざい、欠かけた例れい、digest不一致ふいっち、版違ばんちがいを検出けんしゅつし、同一入力どういつにゅうりょくbuildの決定性けっていせいを検査けんさする。
S03: 配信予定はいしんよていartifactを実じつbrowserで開ひらき、4言語げんごの代表操作だいひょうそうさ、入出力にゅうしゅつりょく、診断選択しんだんせんたく、editor query、停止ていしを実行じっこうする。大おおきなsourceの応答性おうとうせいとkeyboard/focusも確認かくにんする。
S04: docs本文ほんぶんをJSなしで読よみ、4言語げんごtutorial/reference/例れいから同おなじsourceをPlaygroundで開ひらく。page/anchor/検索けんさく/linkとaccessibilityを検査けんさし、自動検査じどうけんさと手動確認しゅどうかくにんを区別くべつする。
S05: 外部がいぶbackend・localhost・CDNなしで基本きほん4言語操作げんごそうさを行おこない、sourceの外部送信がいぶそうしんをせず、sandbox previewがscriptを実行じっこうしないことを検査けんさする。
S06: 最小権限さいしょうけんげん、同おなじ検査済けんさずみSHA/artifact、配信直列化はいしんちょくれつかとfreshness、失敗しっぱいlog保存ほぞんを検査けんさ。実じつPages公開後こうかいごのHTTPS smokeとasset/build identityを照合しょうごうして記録きろくする。公開こうかいsmoke失敗時しっぱいじは検証済けんしょうずみLKGへの有限復旧ゆうげんふっきゅう・再さいsmoke・元もとrun失敗保持しっぱいほじを15章しょうの契約けいやくで検査けんさする。
S06の失敗系しっぱいけいには、次つぎの場合ばあいを含ふくめる。
(a)最新さいしんcandidateのpublic smokeだけが失敗しっぱいし元もとtarを復旧ふっきゅうできる。
(b)後続こうぞくの健康けんこうなdeploymentがあるため旧きゅうcandidateの復旧ふっきゅうを拒否きょひする。
(c)cache/API/journal不一致ふいっち・timeout・外部がいぶwriter疑うたがいで書込かきこみを停止ていしする。
(d)初回公開しょかいこうかいでLKGがない。
(e)Actions artifact失効後しっこうごも永続えいぞくsnapshotから復旧ふっきゅうする。
(f)復旧ふっきゅうpayload消失しょうしつ・改変かいへん。
(g)復旧ふっきゅうdeploy・再さいsmokeの失敗しっぱい。
(h)smoke合格後ごうかくごの保存ほぞん/journal昇格失敗しょうかくしっぱい。
(i)deploy後ごにrunが強制きょうせいcancelされ次つぎのwriterがreconcileを要求ようきゅうする。
自動復旧回数じどうふっきゅうかいすう・時間上限じかんじょうげん、lock保持ほじ、失敗しっぱいrun/incident記録きろく、現行げんこうLKGと前世代ぜんせだいの保持ほじも検証けんしょうする。模擬失敗系もぎしっぱいけいだけで実じつPages公開こうかい/復旧ふっきゅうのrunner要件ようけんを満みたした扱あつかいにしない。
J01: 全対象文書ぜんたいしょうぶんしょのinventoryとDoc表現ひょうげんgapを独立どくりつレビューし、表ひょう/list/link/汎用はんようcode/図ずの必要ひつようなschema・文法ぶんぽう・backend・wire・conformanceを完成かんせいさせる。
J02: 全移行ぜんいこうページを元もとの固定こていsnapshotと比較ひかくし、意味いみ・表ひょう・参照さんしょう・数式すうしき・図ず・コードbyte列れつの同等性どうとうせいを独立どくりつに確認かくにんする。一ひとつの正本せいほんと生成せいせいMarkdownの差分検査さぶんけんさを行おこなう。
J03: Doc正本せいほんからの公開物こうかいぶつで安定あんていpage ID/URL/anchor、検索けんさく、例れいrevision、リンク、accessibilityを維持いじし、非ひroot配信はいしんとbrowserで確認かくにんする。
J04: 旧版きゅうはんの検証済けんしょうずみrendererによる明示的めいじてきな文書ぶんしょbuildと現行げんこうruntime受入うけいれを区別くべつし、bootstrap循環じゅんかんがないこと、全ぜんページのDoc正本せいほんへの切替きりかえ、決定的生成けっていてきせいせい、欠落けつらく・未対応時みたいおうじの停止ていしを検査けんさする。
必須群ひっすぐんと必須ひっすtargetの正本せいほんは design/acceptance.json。本文ほんぶんのID、catalog、implementation-statusの群集合ぐんしゅうごうを一致いっちさせ、T16は全ぜんrequired群ぐんを要求ようきゅうする。r3は55群ぐんだが、この数かずをcheckerの完了条件かんりょうじょうけんへ固定こていしない。nativeはLinux x86_64、Windows x86_64、macOS aarch64、WASIはwasm32-wasip2をWasmtimeで実行じっこう、browserは実じつChromium/Firefox/WebKitを対象たいしょうとし、正確せいかくな版ばんをlogへ記録きろくする。native process固有群こゆうぐんはnative targetで検査けんさする。WebKitの成功せいこうから実じつSafari device QAを推定すいていしない。
2. propertyとfuzz
任意にんいのvalidな有限ゆうげんprefix treeからprint→parse→lowerの意味一致いみいっち。任意にんいのUTF-8入力にゅうりょくでpanicしない。case分割ぶんかつした入力にゅうりょくstreamと一括入力いっかつにゅうりょくが同おなじ最終さいしゅうtoken列れつ。消費範囲しょうひはんいの単調性たんちょうせい。Origin DAGの閉路へいろなし。可逆かぎゃくなSourceMapだけがrenameを許ゆるす。小幅回路こはばかいろの原式げんしきとNORの一致いっち。
fuzz入力にゅうりょくでも上限じょうげんを共有きょうゆうする。大量たいりょうdiagnosticを発生はっせいさせる入力にゅうりょくで無制限むせいげんallocしない。OOMを完全かんぜんに回避かいひできると虚偽きょぎの保証ほしょうをしない。
3. 不変条件ふへんじょうけんのCI
cargo fmt --check、clippyの対象たいしょうwarningのdeny、workspace tests、doc tests、package生成せいせいの差分検査さぶんけんさ、dependency検査けんさ、target別べつcheck、conformance runner、fuzz smoke、license/asset/unsafe監査かんさ。
一ひとつのarchitecture boundaryごとにtestがあり、再設計時さいせっけいじに未更新みこうしんの依存いぞんを検出けんしゅつできる。新あたらしいconstructorを追加ついかした際さいはparser、lower、check、print、render、wire、editorのcoverage表ひょうに行ぎょうが増ふえる。None/unsupportedで黙だまって網羅扱もうらあつかいにしない。
4. 開発かいはつの段階だんかい
順序じゅんじょはtasksで管理かんりする。前段ぜんだんを先さきに完成かんせいさせることは許可きょかするが、未完みかんの後段こうだんをその時点じてんの「完成仕様かんせいしよう」と呼よばない。最終受入さいしゅううけいれは全必須試験ぜんひっすしけんに対たいする実行証拠じっこうしょうこが揃そろった時点じてん。
design/tasks.json の各かくtask.acceptanceは、そのタスクが寄与きよする試験群しけんぐんのcoverage参照さんしょうである。試験群しけんぐんには後続こうぞくタスクの責務せきむも含ふくむため、参照さんしょうした群全体ぐんぜんたいのpassedを前段ぜんだんタスクの完了条件かんりょうじょうけんにしない。T16以外いがいのタスクのcompleteには、当該とうがいdeliverableの実装じっそう、scopeを限定げんていした検証証拠けんしょうしょうこ、依存いぞんタスクのcomplete、および関連かんれんする未解消みかいしょうの設計せっけいblockerがないことを要求ようきゅうする。証拠しょうこは conformance/results/ 以下いかのJSONとし、task_id、checks(空からでない文字列もじれつの非空ひくうlist)、commands(同どう)、targets(同どう)、result(passed)、excluded_acceptance_portions(未検証範囲みけんしょうはんいの文字列もじれつlist、明示的めいじてきな空からlistを許可きょか)を持もつ。implementation-statusの当該とうがいタスクからファイルを参照さんしょうする。形かたちだけの証拠しょうこファイルではなく、記載きさいしたコマンドの実行結果じっこうけっかをレビューする。
例たとえばT01のsource契約試験けいやくしけんを実行じっこうしてT01をcompleteにしても、E03/E04のエディタ操作そうさを実装じっそう・検査けんさしていなければ当該群とうがいぐんはnot-runのままとする。群全体ぐんぜんたいのpassedは全要件ぜんようけんの実行証拠じっこうしょうこがそろってから記録きろくする。T16のcompleteには依存いぞんタスクの完了かんりょうに加くわえて、task.acceptanceに記載きさいした一部いちぶの群ぐんだけでなく登録とうろくされた全必須群ぜんひっすぐんのpassedとその証拠しょうこを必須ひっすとする。
5. 群全体ぐんぜんたいの型付かたつき証拠しょうこ
scope付つきTaskEvidenceと群全体ぐんぜんたいのAcceptanceEvidenceを分わける。群ぐんの証拠しょうこschemaは interfaces/acceptance-evidence.schema.json、配置はいちは conformance/results/。schema、acceptance_id、design_revision、identity、result、runs を必須ひっすとする。identityはprofile nepl3.repository-inputs/1 とsource_sha256/spec_sha256を持もち、現在げんざいの検査入力けんさにゅうりょくへ照合しょうごうする。source identityの収集しゅうしゅう・除外規則じょがいきそくは開発かいはつtoolsのidentity操作そうさと開発手順かいはつてじゅんで固定こていする。
runはcatalogのtarget.kindに一致いっちするtag付つき型がたとする。kind: command はcommand、target、result、exit_code、非空ひくうchecks、environment(runnerのname/versionとtoolsのname/version一覧いちらん)、log、log_sha256を持もつ。kind: review はtarget、reviewer識別子しきべつし、independent=true、decision(approved/rejected)、非空ひくうscope、log、log_sha256を持もつ。意味同等性いみどうとうせいレビューのために架空かくうのshell commandや終了しゅうりょうコードを作つくらない。
logは conformance/results/ 内ないの非空ひくう.txtまたは.logファイルとし、証拠しょうこJSON自身じしんを実行じっこうlogにしない。実在じつざいlogとdigestを検査けんさし、別べつID、古ふるいsource/spec/design、未登録みとうろくtarget、target種別不一致しゅべつふいっち、改変かいへんlogを拒否きょひする。passedには全ぜんcommand runがpassedかつexit_code=0、全ぜんreviewがapproved、全ぜんrequired targetの実行じっこう・レビューを要求ようきゅうする。failedは少すくなくとも一ひとつの非ひzero終了しゅうりょうの失敗しっぱいrunまたはrejected reviewを含ふくみ、早期停止そうきていしによる未実行みじっこうtargetを許ゆるすがpassedへ変更へんこうできない。未実行みじっこうを空からlogやbuild成功せいこうで置おき換かえない。
証拠しょうこの形式けいしき・hash検査けんさは記述きじゅつされた挙動きょどうの正ただしさそのものを証明しょうめいしない。期待値きたいちの根拠こんきょ、実行じっこうコマンドとlog、対象たいしょうsource、coverageを独立どくりつレビューする。source/doc仕様しようを変更へんこうした後あとは古ふるい証拠しょうこでcurrent passedを維持いじせず再実行さいじっこうする。T16は全ぜんregistered required群ぐんの型付かたつき証拠しょうこを動的どうてきに確認かくにんする。
この設計せっけいパッケージの検査けんさは別扱べつあつかい。doc/history/design-validation.json に、構文例こうぶんれいの構造検査こうぞうけんさ、依存いぞんDAG、task ID、JSON、例れいの独立算術どくりつさんじゅつ/回路検算かいろけんざんなどの実施範囲じっしはんいを記録きろくする。Rust compiler/editor/browserが完成かんせいしているという証拠しょうこに使つかわない。