Communityライティング&編集github.com

diodesign/diosix-agent-skills

Diosixプロジェクト向けの、Zig 0.17、RISC-Vアセンブリ、システムソフトウェアの記述に関するルール、イディオム、エンタープライズハイパーバイザ標準です。Mモードハイパーバイザ、Sモードエミュレーション、Uモードユーザーランドツールのコード記述やリファクタリング時に有効化してください。

diosix-agent-skills とは?

このスキルは、DiosixエンタープライズRISC-Vハイパーバイザの開発における、Zig 0.17およびRISC-Vアセンブリコードの記述ルールとベストプラクティスを定義します。安全性、セキュリティ、正確性、保守性をこの順で優先し、各行が80桁以内、ファイルは最大500行に制限するなど、厳格なコーディング基準を課します。また、固定幅ABI型の使用、動的メモリ確保、サブフォルダ構成、enumベースのディスパッチ、ユニットテストと結合テストの分離など、具体的で実践的な指示が含まれています。Claude Code, Cursor, CodexなどのAIエージェント向けに設計されており、このスキルを有効にすることで、AIが一貫性のある高品質なDiosixコードを生成できるようになります。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/diodesign/diosix-agent-skills/tree/HEAD/developing-diosix

Installed? Explore more ライティング&編集 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Diosixの開発

安全性 > セキュリティ > 正確性 > 保守性 を優先してください。自己文書化され、メモリ安全で、厳密に制約されたイディオマティックなZig 0.17.0およびRISC-Vアセンブリを記述し、すべての変更が事前コミットの手直しなしに、最初の reviewing-diosix を通過するようにします。

基本要件

  1. 動作し、完全で、ビルド可能なコード(基本条件): すべての変更は、Root VM/ハイパーバイザビルドとホストユニットテストスイート(./scripts/build.sh および ./scripts/build.sh test)の両方で問題なくコンパイルできる必要があります。壊れたコード、スタブの TODO プレースホルダ、モックされた本番パス、または部分的に実装された機能を残さないでください。
  2. 行数とファイルサイズの制限(サブフォルダに分割、決して切り詰めない): すべてのコードとコメントは80桁以内で折り返してください。ソースファイルは500行以内に保ってください。ファイルが500行を超えた場合、その機能やテストを決して切り詰めず、専用のサブフォルダに分解してください(panes/vm.zig、vm/run.zig、tests/gui.zig。フラットな prefix_subname.zig ファイル(panes_vm.zig、vm_run.zig、tests_gui.zig)を増やさないこと)。また、すべてのサブモジュールを親の test ブロックに配線してください(_ = @import("vm/run.zig");)。
  3. プレフィックス-アンダースコア形式のファイル名よりもサブフォルダ、コピペ禁止: プロジェクト、ディレクトリ、または兄弟モジュールの冗長なプレフィックスを付けずに、簡潔な snake_case ファイル名を使用してください(api.zig、main.c、vm/info.zig、tests/nav.zigを使用し、diosix_api.zig、diosix-alsa-init.c、vm_info.zig、tests_nav.zigは使用しない)。共有プリミティブ(Spinlock、ページアライメント計算、パス探索バリデータ、ABI定数など)をモジュール間で決して複製せず、hypervisor/interface/、hypervisor/core/atomic.zig、または common.zig からインポートしてください。
  4. イディオマティックなディスパッチ: コマンド、フラグ、設定キーに対して if (std.mem.eql(...)) else if (...) の連鎖を決して書かないでください。代わりに enum を定義し、std.meta.stringToEnum(EnumType, slice) でパースし、switch でディスパッチしてください。
  5. 明示的な固定幅ABI型、小文字16進数、名前付きビットマスク: すべてのABI/ハードウェア構造体(extern struct、packed struct)および64ビットゲストレジスタ状態では、明示的な固定幅型(u64、u32、u16、u8)を使用し、決して usize や C の unsigned long を使用しないでください。@min/@max から初期化されるローカル変数には、常に comptime リテラルで型注釈を付けてください(const w: usize = @min(n, 1280);)。これにより、Zig が後でオーバーフローする狭い整数型(u11)を推論するのを防ぎます。すべての16進数リテラルは小文字で記述し(0xfff、0xffff_ffff、0xFFF は不可)、マジックビットマスク/オフセット((vaddr & 0xfff) > 0xffc)を名前付き定数と自己文書化ヘルパー(PAGE_OFFSET_MASK、crossesPageBoundary(vaddr, @sizeOf(u32)))に置き換えてください。
  6. 静的推測よりも動的割り当て: ヒープ初期化前に実行される初期Mモードブートコードのみ、固定静的バッファを使用できます。アロケータが利用可能になったら、固定スタックバッファサイズを推測するのではなく、動的にバッファを割り当てて拡張してください(例:var buf: [4096]u8 を避ける)。
  7. メモリ所有権とクリーンアップ: すべての割り当て(alloc、create、dupe、print、mmap)は、直ちに defer または errdefer とペアにしてください。解放されたゲストページと暗号化秘密はゼロ化してください(std.crypto.secureZero)。
  8. エンタープライズハイパーバイザの分離: ゲストの入力や状態によってMモードでパニックを起こさないでください。代わりにSBIエラーを返すか、問題のゲストサブツリーを終了させてください。共有ゲストメモリは、バリデーション前に一度だけハイパーバイザ所有メモリにコピー(@memcpy)して、ダブルフェッチ(TOCTOU)の脆弱性を防止してください。
  9. コードにはメカニズム、ポリシーはビルド時/実行時設定に: ポリシーレベルの設定や調整可能なデフォルト値をZigコードにハードコードしないでください。調整可能な値や設定は、ビルド時設定(build.zig options / boot/hypervisor.conf)または実行時設定ファイル(/etc/diosix/*.toml、key = "value" を1行80桁以内に収める)に移動してください。
  10. バイナリとイメージはビルド時に生成、Zigで動的に生成しない: Zigで実行時にELFバイナリ、マシンコードシム、メディアイメージをワード単位で組み立てるのを避けてください。シムはビルド時にコンパイルされるアセンブリまたはZigソースファイルに保持し、メディアイメージのビルドには専用スクリプトを使用し、生成されたビルド出力を tools/overlay-common/ に配置しないでください(代わりに .zig-cache/overlay-dynamic/ を使用)。
  11. 同一ファイル内のユニットテストと分離された結合テスト: ユニット test ブロックは、テスト対象のソースファイル内に配置してください(std.testing.refAllDecls(@This()) を呼び出す)。複数コンポーネントの結合テストは、専用の tests/ ディレクトリに配置してください。
  12. レガシーフォールバックの蓄積なき後方互換性: 外部契約(SBIハイパーコールABI、/dev/diosix ioctl、文書化された dsx CLIコマンド/JSONスキーマ、ユーザー作成の /etc/diosix/*.toml ファイル)との互換性は維持しますが、同じバージョンの内部配管に対しては、マルチパスフォールバック配列(DEFAULT_GUEST_CANDIDATES)を決して蓄積しないでください。プロデューサーとコンシューマーがこのリポジトリ内で一緒に出荷される場合、単一の正規パスまたはシンボルを使用するように、ツリー内のすべてのプロデューサー、コンシューマー、テストをアトミックに更新し、永続ディスクレイアウトのアップグレードはブート/インストール境界で一度だけ処理し、履歴パスを永久にプローブしないでください。
  13. 不明な場合は、停止してリードメンテナーに確認: アーキテクチャ上の決定、あいまいな要件、欠落したサブシステム機能について推測しないでください。先に進む前に、リードメンテナーに確認してください。

Mモード vs Uモード実行環境

項目Mモードハイパーバイザ(hypervisor/)Uモードツール(tools/)
ターゲットriscv64-freestanding-noneriscv64-linux-musl(テストではホスト)
プリヒープブートentry.s 内の静的コアごとのスラブ(0..31)該当なし(main でOSプロセス環境が準備済み)
アロケータコアごと pcore.this().allocator.allocator()std.heap.SafeAllocator / page_allocator / ArenaAllocator
クラッシュポリシーゲスト入力でパニックしない、問題のゲストVMを隔離して終了説明的なエラーを返し、クリーンな終了コードで終了
ハードウェアアクセス直接CSR/MMIO(ホストユニットテストの場合は if (is_test) でガード)/dev/diosix ioctl(api.zig)、DRM/evdev、Linuxシステムコール

集中リファレンスガイド

コードを記述または変更する前に、該当するリファレンスファイルを読んでください。

  • Zig 0.17.0 イディオムとビルトイン: 最新のZig 0.17構文(@backingInt、@splat、allocator.print、SafeAllocator、stringToEnum、@ptrCast for extern struct、固定幅ABI型、@min 型注釈、末尾カンマ付き80桁フォーマット、ビルドキャッシュの純粋性)。
  • メモリ管理と動的バッファ: MモードとUモードのアロケータパターン、動的バッファ拡張、defer / errdefer の規律、秘密のゼロ化、出力ポインタの初期化。
  • アーキテクチャとTigerStyle: 完全な機能実装、ユニットテストを失わないモジュラーファイル分割、コピペの重複ゼロ、境界のあるループ、アサーションのペアリング、オーバーレイ/設定の衛生管理。
  • RISC-Vとエンタープライズハイパーバイザ: RV64アセンブリ規約、CSRモッキング、爆発範囲の封じ込め、ダブルフェッチ防止パターン、IRQセーフスピンロックの順序付け、Gステージ/PMP分離。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

関連スキル