Veredictum

本サイトが提示する下記のベストプラクティスを実行するプロジェクトは、Open Source Security Foundation (OpenSSF) バッジを達成したことを自主的に自己認証し、そのことを外部に示すことができます。

ソフトウェアに欠陥や脆弱性がないことを保証する手立てはありません。形式論的な証明ができたとしても、仕様や前提が間違っていると誤動作の可能性があります。また、プロジェクトが健全で、かつ機能的な開発コミュニティであり続けることを保証する手立てもありません。しかし、ベストプラクティスの採用は、プロジェクトの成果の向上に寄与する可能性があります。たとえば、いくつものベストプラクティスがリリース前の複数人によるレビューを定めていますが、それによりレビュー以外では発見困難な技術的脆弱性を見つけるのを助け、同時に異なる企業の開発者間の信頼を築き、さらに交流を続けることに対する意欲を生んでいます。バッジを獲得するには、すべてのMUSTおよびMUST NOT基準を満たさなければなりません。すべてのSHOULD基準も満たさなければなりませんが、正当な理由がある場合は満たさなくても構いません。そしてすべてのSUGGESTED基準も満たさなければなりませんが、満たさないとしても、少なくとも考慮することが望まれます。フィードバックは、 GitHubサイトのissueまたはpull requestとして提示されれば歓迎します。また、議論のためのメールリストも用意されています。

私たちは多言語で情報を提供していますが、翻訳版に矛盾や意味の不一致がある場合は、英語版を正式な記述とします。
これがあなたのプロジェクトなら、あなたのプロジェクトページにあなたのバッジステータスを表示してください!バッジステータスは次のようになります。 プロジェクト 14252 のバッジ レベルは silver です バッジステータスの埋め込み方法は次のとおりです。
バッジステータスを表示するには、あなたのプロジェクトのマークダウンファイルに以下を埋め込みます
[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/14252/badge)](https://www.bestpractices.dev/projects/14252)
あるいは、以下をHTMLに埋め込みます
<a href="https://www.bestpractices.dev/projects/14252"><img src="https://www.bestpractices.dev/projects/14252/badge"></a>


これらはシルバーレベルの基準です。合格またはゴールドレベル基準を表示することもできます。

Baseline Series: ベースラインレベル1 ベースラインレベル2 ベースラインレベル3

        

 基本的情報 17/17

  • 一般

    他のプロジェクトが同じ名前を使用していないか注意してください。

    An independent conformance instrument for openEHR clinical data repositories. A machine-readable catalogue of 1103 spec-cited test cases and 247 operation bindings is driven against a running CDR over its own REST wire; verdicts are a pure function of the party statement, the recordings, the catalogue and the capability matrix, and the emitted record is sealed with a SHA-256 digest manifest and a detached OpenPGP signature so anyone can re-check it. Every expectation cites the released openEHR specification section it enforces, and the specification text is vendored so each citation resolves.

    SPDXライセンスの表現形式を使用してください。 例:「Apache-2.0」、「BSD-2-Clause」、「BSD-3-Clause」、「GPL-2.0+」、「LGPL-3.0+」、「MIT」、「(BSD-2-Clause OR Ruby)」。一重引用符または二重引用符を含めないでください。
    複数の言語がある場合は、コンマを区切り(スペースを入れてもよい)としてリストし、使用頻度の高いものから順に並べます。使用言語が多くある場合は、少なくとも最初の3つの最も多く使われるものをリストアップしてください。言語がない場合(例:ドキュメントだけ、またはテスト専用のプロジェクトの場合)、1文字 " - "を使用します。言語ごとにある大文字・小文字の慣用を踏襲してください(例:「JavaScript」)。
    Common Platform Enumeration(CPE)は、情報技術(IT)システム、ソフトウェア、およびパッケージのための構造化された命名体系です。脆弱性を報告する際に、多くのシステムやデータベースで使用されています。
  • 前提要件


    プロジェクトは合格レベルバッジに達成しなければなりません。 [achieve_passing]

  • 基本的なプロジェクト ウェブサイトのコンテンツ


    貢献する方法に関する情報には、受け入れ可能な貢献の要件(例えば、必要なコーディング標準への言及)が含まれなければなりません。 (URLが必要です) [contribution_requirements]

    CONTRIBUTING.md states the requirements for an acceptable contribution: the gate commands every PR must pass (cargo build/clippy -D warnings/fmt --check/nextest/deny check, plus veredictum validate at zero findings), the hard rules (every expectation cites its specification section; never weaken, skip or delete a test; coverage ratchets up only; a red row is attributed before anything changes; comment form per RFC 505 and RFC 1574), enforced-signed commits, conventional-commit subjects, a same-PR changelog entry, and tests with behaviour changes: https://github.com/rubentalstra/Veredictum/blob/main/CONTRIBUTING.md


  • プロジェクトの管理・運営


    プロジェクトは、プロジェクト ソフトウェアのそれなりの量を開発しているすべての開発者が、これらの貢献を行うことが法的に認められていると主張すりょうな法的な仕組みを持っていなければなりません。これを行うための最も一般的で簡単に実装されたアプローチは、開発者証明書(DCO)を使用することです。ユーザーは、 DCOのウェブサイトへのプロジェクトのリンクが表示されます。ただし、これはコントリビュータ ライセンス契約(CLA)またはその他の法的な仕組みとして実装することができます。 (URLが必要です) [dco]
    DCOは、実装が容易で、ソースコードで追跡され、gitが "commit -s"を使用して "サインオフ"機能を直接サポートするため、推奨されるメカニズムです。最も効果的であるためには、プロジェクト文書が、そのプロジェクトに対して「サインオフ」とは何を意味するのかを説明するのが最善です。 CLAは、知的著作物が組織またはプロジェクトにライセンスされている条件を定義する法的合意です。コントリビュータ アサイン アグリーメント(CAA)は、知的著作物の権利を他の当事者に移転する法的合意です。プロジェクトはCAAを必ずしも持つ必要はありません。なぜなら、CAAは、特に受領者が営利目的の組織である場合には、潜在的な貢献者が貢献しないリスクを高めます。 Apache Software Foundation CLA(個々のコントリビュータ ライセンスと法人CLA)は、この種のCLAのリスクを判断するプロジェクトにとって、リスクが便益よりも小さいのCLAの例です。

    Inbound = outbound, by the licence itself rather than by a separate agreement: Apache-2.0 section 5 places every contribution under the same licence unless the contributor explicitly states otherwise, and CONTRIBUTING.md and GOVERNANCE.md § What this project will not do both restate it — there is no CLA and no copyright assignment, contributors keep their copyright, and the licence stays Apache-2.0 for everyone including the maintainer. Authorship is verifiable rather than asserted: every commit in the history is OpenPGP-signed and the main ruleset refuses an unsigned one. There is no DCO sign-off trailer: https://github.com/rubentalstra/Veredictum/blob/main/CONTRIBUTING.md



    プロジェクトは、プロジェクト ガバナンス モデル(主要な役割を含む意思決定方法)を明確に定義し、文書化しなければなりません。 (URLが必要です) [governance]
    決定を下し、論争を解決するための十分に確立された文書化された方法が必要です。小規模なプロジェクトでは、これは「プロジェクトオーナーとリーダーがすべての最終決定を下す」という単純なものです。慈愛の強い独裁者や正式な能力主義を含む様々な統治モデルが存在します。詳細については、統治モデルを参照してください。集中化された(例えば、単一メインテナー)および分散された(例えば、グループ メインテナー)アプローチの両方が、プロジェクトにおいて成功のうちに使用されています。統治情報は、プロジェクトフォークを作成する可能性について文書化する必要はありません。なぜなら、これはFLOSSプロジェクトでは常に可能であるからです。

    GOVERNANCE.md documents the model as it actually is: one maintainer with final say, why the released specifications and not the maintainer decide conformance (including the stated conflict of interest with FerroEHR, a CDR this instrument grades), where decisions are recorded, how a change gets in, how someone becomes a maintainer, and the standing refusals: https://github.com/rubentalstra/Veredictum/blob/main/GOVERNANCE.md



    プロジェクトは、行動規範を採択し、標準的な場所に掲示しなければなりません。 (URLが必要です) [code_of_conduct]
    プロジェクトは、地域社会の礼儀正しさを向上させることと、行動規範を採択することで受け入れられる行動についての期待を設定すること、ができるかもしれません。これにより、問題が発生する前に問題を回避し、プロジェクトをより貢献を促す場所にすることができます。これは、プロジェクトのコミュニティ内や職場内の行動にのみ焦点を当てるべきです。行動規範の例としては、以下のようなものがあります。Linuxカーネル行動規範コントリビューター規約行動規範Debian行動規範Ubuntu行動規範Fedora行動規範GNOME行動規範KDEコミュニティ行動規範Pythonコミュニティ行動規範Rubyコミュニティ行動指針、およびRust 行動規範

    Contributor Covenant, in the standard root location, with the enforcement contact and the four-tier enforcement ladder, and linked from CONTRIBUTING.md and GOVERNANCE.md: https://github.com/rubentalstra/Veredictum/blob/main/CODE_OF_CONDUCT.md



    プロジェクトは、プロジェクトでの重要な役割と役割が実行しなければならないタスクを含む責任を明確に定義し、公的に文書化しなければなりません。誰がどの役割を持っているかは明確でなければなりませんが、これは同じ方法で文書化されていない可能性があります。 (URLが必要です) [roles_responsibilities]
    統治と役割と責任に関する文章は1か所にあるのが良いでしょう。

    GOVERNANCE.md defines the roles and how a change gets in; MAINTAINERS.md names who holds them (one person, since 2026-08-26) and, identity by identity, what each credential can publish; .github/CODEOWNERS carries the review ownership. The three edits that add a maintainer are named explicitly: https://github.com/rubentalstra/Veredictum/blob/main/MAINTAINERS.md



    いずれかの人が仕事を継続できなくなるまたは死亡した場合、プロジェクトは最小限の中断で継続することができなければなりません。特に、プロジェクトは、課題の作成と終了、提案された変更の受け入れ、およびバージョンのソフトウェアのリリース、1週間内に個人が仕事を継続できくなったことまたは死亡したことの確認、行うことができなければならない。これは、他の誰かがプロジェクトを継続するのに必要な鍵、パスワード、法的権利を持っていることを保証することによって行うことができます。 FLOSSプロジェクトを実行する個人は、ロックボックスにキーを提供し、必要な法的権利を提供する意志(例えば、DNS名のために)を提供することによって、これを行うことができます。 (URLが必要です) [access_continuity]

    Honest: this is met, and MAINTAINERS.md § Publishing identities and § If the maintainer is unavailable say so first-hand rather than promising a plan. Every identity that can publish under this name terminates at one person's GitHub account, one person's hardware, or one person's registrar login: the OpenPGP commit- and tag-signing key is not escrowed, the repository is user-owned so GitHub account recovery is the only route, and crates.io and Zenodo both hang off that same account. Nothing already published disappears (immutable releases, an undeletable container digest, a permanent Zenodo DOI, Apache-2.0 plus public history so a fork is a complete continuation) — but nothing new ships, and no one else could create or close issues, accept a change, or cut a release within a week. The trigger is a second maintainer with write access and a second holder wherever an identity permits one: https://github.com/rubentalstra/Veredictum/blob/main/MAINTAINERS.md



    プロジェクトは2以上の "バス ファクタ"を持っているべきです。 (URLが必要です) [bus_factor]
    「バス ファクタ」(別名「トラック ファクタ」)は、知見があり有能な人材が離脱して、プロジェクトが停止に至る時に、プロジェクトから突然消失する(「バスに当たった」)プロジェクトメンバーの最小人数です。 トラック ファクタツールは、GitHub上のプロジェクトに対してこれを見積もることができます。詳細については、Cosentino et al。の Gitリポジトリのバス ファクタの評価を参照してください。

    The bus factor is 1. GET /repos/rubentalstra/Veredictum/collaborators returns one login; one person can accept a pull request and cut a release; no organisation or legal entity stands behind the project. The route to a second maintainer, explicitly including one from a competing implementation, is open and documented in GOVERNANCE.md § Becoming a maintainer: https://github.com/rubentalstra/Veredictum/blob/main/GOVERNANCE.md


  • ドキュメンテーション


    プロジェクトは、少なくとも翌年に、プロジェクトが何をしたいか、やるつもりはないかを記述した文書化されたロードマップを持っていなければなりません。 (URLが必要です) [documentation_roadmap]
    このプロジェクトはロードマップを達成できないかもしれません。それは問題ありません。ロードマップの目的は、潜在的なユーザーや貢献者がプロジェクトの意図された方向を理解するのを助けることです。詳細にする必要はありません。

    A public roadmap board now exists and is linked from the README: https://github.com/users/rubentalstra/projects/5 — planned, in progress and shipped, as a view over the issue tracker, with milestones as releases. The prose halves back it: ARCHITECTURE.md § 11 Gap-fill roadmap is the ordered content plan for the catalogue (querying/AQL first, then the maximal-coverage template round-trip, the scenario/lifecycle suites, the performance and volumetrics chapter — each a bounded, assignable chapter task ordered by procurement value), and GOVERNANCE.md § What this project will not do is the explicit will-not-do half: no CLA or copyright assignment, no expectation without a specification citation, no gate weakened to go green, no verdict a reader cannot re-derive, no paid pass and no privileged party.



    プロジェクトは、プロジェクトによって作成されたソフトウェアのアーキテクチャー(いわゆる高水準設計)の文書を含まなければなりません。プロジェクトでソフトウェアが作成されない場合は、「該当なし」(N/A)を選択します。 (URLが必要です) [documentation_architecture]
    ソフトウェア アーキテクチャは、プログラムの基本的な構造、すなわちプログラムの主な構成要素、それらの間の関係、およびこれらの構成要素および関係の主要な特性を説明します。

    ARCHITECTURE.md is the design record rather than a summary of one: the testable surface and case-core field definitions, the per-operation wire bindings, the outcome taxonomy and ambiguity register, the assertion vocabulary, the verdict computation (§ 8), and the population-anchored performance-class model with its journey decomposition (§ 8.14). The user-facing conformance-method chapter is at https://veredictum.eu/docs/methodology.html : https://github.com/rubentalstra/Veredictum/blob/main/ARCHITECTURE.md



    プロジェクトは、ユーザーが、プロジェクトによって作成されたソフトウェアからセキュリティの観点から期待できるものと期待できないものを文書化しなければなりません。(セキュリティ要件) (URLが必要です) [documentation_security]
    これらは、ソフトウェアが満たすことが意図されているセキュリティ要件です。

    Two documents, and neither repeats the other. SECURITY.md carries what a user can and cannot expect: the supported version is the most recent release only — no maintenance branch, no LTS line, no backports — stated with its consequence for anyone publishing a conformance record; the private reporting route and the response commitments; safe harbour; § Scope notes on which classes are security-relevant here (credentials for the system under test, verdict integrity, release-artifact integrity) and which deliberately are not; and the standing warning never to point the runner at a live clinical deployment, because it writes into the system it tests. ASSURANCE_CASE.md carries the argument behind those requirements, boundary by boundary: https://github.com/rubentalstra/Veredictum/blob/main/SECURITY.md



    プロジェクトでは、新規ユーザーがソフトウェアで何かをすばやく実行できるようにするための「クイックスタート」ガイドを提供する必要があります。 (URLが必要です) [documentation_quick_start]
    このアイデアは、ユーザーにソフトウェアを始動させる方法と何かをさせる方法を示すことです。これは潜在的なユーザーが開始するために非常に重要です。

    Two of them. The README § Quick start is four commands from a clone to a rendered verdict (validate, copy a party example, run, verdicts), with a prebuilt-binary path and a cargo install path beside it; the documentation site carries the same as its installation and running chapters: https://github.com/rubentalstra/Veredictum#quick-start



    プロジェクトは、現行バージョンのプロジェクト結果(プロジェクトによって作成されたソフトウェアを含む)とドキュメントの整合性を保つために努力しなければならない。 不一致を招く既知のドキュメントの欠陥は、修正しなければなりません。ドキュメントが一般的に最新のものですが、古い情報が誤って含まれて、もはや正しくない場合は、それを欠陥として扱い、通常どおりに追跡して修正してください。 [documentation_current]
    ドキュメントには、ソフトウェアのバージョン間の相違点や変更点、および/またはドキュメントの古いバージョンへのリンクに関する情報が含まれていてもよいです。この基準の意図は、ドキュメントが完璧である必要があることではなく、ドキュメントの一貫性を保つための努力がなされていることです。

    The docs are machine-held to the code. The Docs workflow gates on mdbook-lint over every chapter and a blocking internal link check (lychee) before the site deploys, scripts/checks/site-counts.sh fails if the counts the site prints disagree with what veredictum validate reports over the catalogue, and CI requires a user-visible change to add its CHANGELOG entry in the same pull request. The published API documentation is generated from the source with missing_docs as a lint, so it cannot drift from the code: https://github.com/rubentalstra/Veredictum/actions/workflows/docs.yml



    プロジェクトのリポジトリのフロントページおよび/またはウェブサイトは、このベストプラクティスのバッジを含め、成果が達成されたことを一般に認められてから48時間以内に特定し、ハイパーリンクする必要があります。 (URLが必要です) [documentation_achievements]
    達成とは、いくつかのバッジを含めて、プロジェクトが具体的に満たしている外部基準のセットです。この情報は、プロジェクトのウェブサイトのフロントページにある必要はありません。 GitHubを使用するプロジェクトは、READMEファイルに追加することで、リポジトリのフロントページに成果を置くことができます。

    The README's badge rows are live readings, not claims, and they include this badge (project 14252) beside OpenSSF Scorecard, SLSA Build L3, the Zenodo DOI, CI, CodeQL and the four SonarQube Cloud ratings; the comment beneath them says which read below their ceiling today and why, check by check: https://github.com/rubentalstra/Veredictum#readme


  • アクセシビリティと国際化


    プロジェクト(プロジェクト サイトとプロジェクト結果の両方)は、アクセシビリティのベストプラクティスに従い、障害のある人が引き続きプロジェクトに参加し、プロジェクトの結果を合理的な範囲で使用することができるようにするべきです。 [accessibility_best_practices]
    ウェブアプリケーションについては、ウェブ コンテンツ アクセシビリティ ガイドライン(WCAG 2.0)とそのサポート ドキュメント WCAG 2.0の理解; W3Cアクセシビリティ情報を参照してください。 GUIアプリケーションの場合は、環境固有のアクセシビリティ ガイドラインの使用を検討して下さい(GnomeKDEXFCE Android bility/ios/" > iOS Mac Windows )。いくつかのTUIアプリケーション(例えば、「ncurses」プログラム)は、「alpine」の 「force-arrow-cursor」設定のような、よりアクセスしやすくするためにいくつかのことを行うことができます。ほとんどのコマンドライン アプリケーションは、そのままの状態でかなりアクセス可能です。この基準は、例えば、プログラム ライブラリの場合、「該当なし」(N/A)であることが多いです。取り上げるべき行動や考慮すべき課題の例を以下に示します。
    • テキスト以外のコンテンツの代替テキストを提供するkotode, 人々が必要とする他の形式に変更することができます。大きな印刷物、点字、スピーチ、記号またはより単純な言語などです。( WCAG 2.0ガイドライン1.1
    • アクションを示したり、応答を促したり、または視覚的要素を区別するために、色が唯一の視覚的な伝達手段として使用されるわけではありません。( WCAG 2.0ガイドライン1.4.1
    • 大文字、付随的なテキストとロゴタイプを除いて、テキストの視覚的提示とテキストのイメージには、少なくとも4.5:1の比率のコントラストがあります( WCAG 2.0ガイドライン1.4.3
    • キーボードからすべての機能を利用できるようにする(WCAGガイドライン2.1)
    • GUIまたはウェブ ベースのプロジェクトは少なくとも1つターゲットプラットフォーム上のスクリーンリーダーでテストするべきです(例えば、NVDA、Jaws、またはWindows上のWindowEyes; MacとiOSのVoiceOver Linux / BSDのOrca;AndroidのTalkBack)。 TUIプログラムは、スクリーンリーダーによる冗長な読み取りを防止するために、オーバードローを減らせるかもしれません。

    Not evaluated systematically, so not claimed. The console is built with accessibility affordances in place — ARIA landmarks and labels on the primary navigation, breadcrumbs, the dark-mode toggle and the toast dismissal, and the journey tests select on those aria-labels, so they cannot silently disappear — but no WCAG audit, axe run or assistive-technology pass has been done, and the console is still under construction (image tags published before its first release carry the CLI as the payload). The CLI itself is plain text on a terminal. The trigger is an accessibility evaluation of the console once its screens settle.



    プロジェクトによって作成されたソフトウェアは、ターゲット オーディエンスの文化、地域、または言語へのローカリゼーションを容易にするために国際化されるべきです。国際化(i18n)が適用されない場合(たとえば、ソフトウェアがエンドユーザー向けのテキストを生成せず、人間が読めるテキストを扱わない場合)、「該当なし」(N/A)を選択します。 [internationalization]
    ローカリゼーションとは、「特定のターゲット市場(ロケール)の言語、文化、およびその他の要件を満たす、製品、アプリケーションまたはドキュメントのコンテンツの適合を指します」。国際化とは、「文化、地域、言語によって異なるターゲットオーディエンスに対してローカライズを容易にする製品、アプリケーション、またはドキュメントコンテンツの設計と開発」のことです。 ( W3Cの「ローカリゼーションと国際化」を参照してください。)ソフトウェアは国際化されるだけでこの基準を満たします。いったんソフトウェアが国際化されると、他の人がローカライゼーションに取り組むことができるので、別の特定の言語のローカリゼーションは必要ありません。

    Stated honestly rather than claimed or dismissed. The instrument's own machine surface is locale-independent by design (spec-fixed openEHR identifiers, ISO datetimes, integer arithmetic with no clock or locale in the resolvers, locale-independent rendering in the document assets), and clinical content carries its own language codes through the openEHR RM. But the human-readable surface — CLI output, the report and certificate documents, and the console's UI strings — is English-only with no localization mechanism, so a translator has nothing to hook into today. There is no i18n framework and no second locale.


  • その他


    プロジェクト サイト(ウェブサイト、リポジトリ、およびダウンロードURL)が外部ユーザーの認証用のパスワードを格納する場合、パスワードは、キーストレッチ(反復)アルゴリズム(PBKDF2、Bcrypt、Scrypt、PBKDF2など)を使用してユーザーごとのソルトで反復ハッシュとして保存する必要があります。プロジェクトサイトがこの目的のためにパスワードを保存しない場合は、「該当なし」(N/A)を選択します。 [sites_password_security]
    GitHub の使用はこの基準を満たしていることに注意してください。この基準は、プロジェクト サイトへの外部ユーザーの認証に使用されるパスワードにのみ適用されます(別名インバウンド認証)。プロジェクト サイトが他のサイトにログインしなければならない場合(別名:アウトバウンド認証)、その目的のために別の方法で認証トークンを保存する必要があるかもしれません(ハッシュを保存しても意味がないため)。これは、crypto_password_storage の基準を sites_httpsと同様にプロジェクトサイトに適用します。

    No project site stores passwords for authentication of external users. The repository and the documentation site are GitHub and GitHub Pages, and the web console has no login at all — which is why its publish flag binds it to loopback and exposing it further is explicitly the operator's decision behind their own gate.


 変更管理 1/1

  • 以前のバージョン


    プロジェクトは、最も頻繁に使用される古いバージョンの製品を維持するか、または新しいバージョンへのアップ グレードを提供しなければなりません。アップ グレード方法が困難な場合は、プロジェクトは、アップグレード方法(変更されたインターフェイスや、アップグレードに役立つ詳細な手順など)を記載しなければなりません。 [maintenance_or_update]

    Actively maintained: four releases in the current cycle (0.0.1-alpha.1 through 0.1.0-alpha.4, the latest on 2026-08-27), a tracker past #100 under continuous triage, Dependabot plus a scheduled latest-deps lane and a weekly published-image scan that files its own tracking issue, and CHANGELOG.md accumulating entries between cuts: https://github.com/rubentalstra/Veredictum/releases


 報告 3/3

  • バグ報告プロセス


    プロジェクトは、個々の課題を追跡するための課題トラッカーを使用する必要があります。 [report_tracker]

    GitHub Issues, with three typed templates (defect, enhancement, task), labels and milestones, used for both defects and enhancement requests: https://github.com/rubentalstra/Veredictum/issues


  • 脆弱性報告プロセス


    プロジェクトは、匿名の報告者を除いて、過去12ヶ月間に解決されたすべての脆弱性の報告者に信用していることを伝えなければなりません。過去12ヶ月間に解決された脆弱性がない場合は、「該当なし」(N / A)を選択します。 (URLが必要です) [vulnerability_report_credit]

    SECURITY.md § Credit: reporters are named in the advisory and the changelog by default, using whatever name and link they give, and declining credit costs nothing and changes nothing about how the report is handled: https://github.com/rubentalstra/Veredictum/blob/main/SECURITY.md



    プロジェクトには、脆弱性レポートに対応するための文書化されたプロセスがなければなりません。 (URLが必要です) [vulnerability_response_process]
    これはvulnerability_report_processに強く関連しており、脆弱性を報告するための文書化された方法が必要です。これは、特定の時間枠内の脆弱性レポートへの応答を必要とする、vulnerability_report_responseにも関連しています。

    SECURITY.md § Reporting a vulnerability and § What you can expect: private reporting through GitHub Security Advisories, an acknowledgement within 5 working days with a documented public-escalation fallback if it does not arrive, an assessment with a severity and an intended fix window within 14 calendar days, and a coordinated disclosure date agreed with the reporter rather than imposed. Safe harbour is stated. The commitments are framed as commitments to the reporter, not conditions on them: https://github.com/rubentalstra/Veredictum/blob/main/SECURITY.md


 品質 19/19

  • コーディング標準


    プロジェクトは、使用する主要な言語のための特定のコーディング スタイル ガイドを指定しなければなりませんし、貢献が一般にそれに準拠することを要求しなければなりません。 (URLが必要です) [coding_standards]
    ほとんどの場合、これはいくつかの既存のスタイル ガイドを参照し、おそらく差異をリストすることによって行われます。これらのスタイル ガイドには、可読性を向上させる方法や、欠陥(脆弱性を含む)の可能性を減らす方法が含まれています。多くのプログラミング言語には、広く使用されているスタイル ガイドが1つ以上あります。スタイルガイドの例には、 Googleスタイル ガイド SEI CERTコーディング標準を参照してください。

    CONTRIBUTING.md documents the standards and CLAUDE.md carries the full set: rustfmt, clippy at pedantic-deny, the comment form (line comments only, RFC 505 and RFC 1574, with budgets and typed TODO/NOTE conventions), the citation rule for every expectation, and the test discipline. The machine-readable half is in the repository as configuration: rustfmt.toml, clippy.toml and the workspace lint tables in Cargo.toml: https://github.com/rubentalstra/Veredictum/blob/main/CONTRIBUTING.md



    選択した言語において行うことができるFLOSSツールが少なくとも1つあれば、プロジェクトは自動的に選択したコーディングスタイルを適用しなければなりません。 [coding_standards_enforced]
    これは、静的解析ツールを使用して、および/またはコード再フォーマットを介してコードを強制することによって実装することができます。多くの場合、ツールの設定は、プロジェクトのリポジトリに含まれます(プロジェクトによって異なる設定が選択される可能性があるため)。プロジェクトはスタイルの例外を許可するかもしれません(通常はそうなります)。例外が発生した場合は、それらの場所のコードでまれで、文書化されていなければなりませんので、それらの例外が再検討され、ツールが将来自動的にそれらを処理できるようにできます。このようなツールの例には、ESLint(JavaScript)、Rubocop(Ruby)、および devtools check (R)があります。

    Enforced on every pull request and push, not advisory: cargo fmt --all --check, cargo clippy --locked --workspace --all-targets -- -D warnings (plus the console's ssr and wasm hydrate targets), scripts/checks/comment-style.sh over the whole tree, changelog-structure and same-PR changelog-entry guards, a REUSE lint, an image-label guard, a VEX-advisory guard, zizmor and actionlint over the workflows and hadolint over the Dockerfile — all behind one required conclusion check, with a guard that fails if any job is left out of it: https://github.com/rubentalstra/Veredictum/actions/workflows/ci.yml


  • 作業ビルドシステム


    ネイティブ バイナリのビルドシステムは、それらに渡される関連するコンパイラおよびリンカ(環境)変数(CC、CFLAGS、CXX、CXXFLAGS、LDFLAGSなど)を受け入れ、コンパイラおよびリンカ呼び出しに渡す必要があります。ビルド システムは追加のフラグでそれらを拡張するかもしれません。提供された値を単にそれ自身のものに置き換えてはいけません。ネイティブバイナリが生成されていない場合は、「該当なし」(N/A)を選択します。 [build_standard_variables]
    Address Sanitizer(ASAN)などの特別なビルド機能を有効にしたり、ディストリビューション強化のベストプラクティスに準拠したりするのは簡単です(コンパイラフラグを簡単にオンにするなどして)。

    The build is cargo end to end, with no bespoke wrapper to swallow anything: it honours the standard cargo and rustc environment conventions (RUSTFLAGS, CARGO_*, profile overrides in Cargo.toml), and native dependencies built through the cc crate honour CC and CFLAGS in the usual way. Nothing in the repository replaces a passed-in flag set.



    ビルドとインストール システムは、関連するフラグ(例えば、 "install -s"が使用されていない)で要求されたデバッグ情報を保存しておくべきです。ビルドやインストール システムがない場合(例:一般的なJavaScriptライブラリ)は、「該当なし」(N/A)を選択します。 [build_preserve_debug]
    すなわち、CFLAGS(C)またはCXXFLAGS(C ++)を設定すると、それらの言語が使用されている場合に、関連デバッグ情報が作成されるべきですし、インストール時には削除するべきではありません。デバッグ情報は、サポートと分析のために必要であり、コンパイルされたバイナリのハードニング機能の存在を測定するのにも役立ちます。

    Deliberate, and commented as such in Cargo.toml: the release profile keeps debug = "line-tables-only" so a production panic names its file and line, and strip stays at its default of none because stripping symbols makes traces incomprehensible. overflow-checks = true is kept on in release for the same reason. Nothing strips by default: https://github.com/rubentalstra/Veredictum/blob/main/Cargo.toml



    プロジェクトによって作成されたソフトウェアのビルド システムは、サブディレクトリに相互依存関係がある場合、再帰的にサブディレクトリをビルドしてはなりません。ビルドやインストール システムがない場合(例:一般的なJavaScriptライブラリ)は、「該当なし」(N/A)を選択します。 [build_non_recursive]
    プロジェクトのビルド システムの内部依存情報は、正確でなければなりません。そうでないと、プロジェクトへの変更が正しくビルドされないことがあります。ビルドが正しくないと、欠陥(脆弱性を含む)が発生する可能性があります。大規模ビルドシステムでよく見られる間違いは、ソースファイルを含むサブディレクトリの階層で、各サブディレクトリが独立してビルドされるとき、「再帰的ビルド」か「再帰的Make」を使用することです。各サブディレクトリが完全に独立していない限り、依存関係の情報が正しくないため、これらを使用することは間違いです。

    One cargo workspace with one dependency graph, which cargo builds as a single DAG. There is no recursive make and no per-directory build.



    プロジェクトは、ソースファイルから情報を生成するプロセスを繰り返すことができなければならず、ビット単位でまったく同じ結果を得ることができなければなりません。ビルドが発生しない場合(例えば、ソースコードをコンパイルする代わりに直接使用するスクリプト言語)は、「該当なし」(N/A)を選択します。 [build_repeatable]
    GCCとclangのユーザーには、-frandom-seedオプションが有用であるかもしれません。場合によっては、ソート順を強制することで解決できます。 再現可能なビルドサイトで、より多くの提案を見つけることができます。

    CI builds with --locked against the committed Cargo.lock and a compiler pinned by rust-toolchain.toml; the container build pins its base images by digest (the builder and gcr.io/distroless/cc-debian13:nonroot both by sha256) and a release step checks that the container, rust-toolchain.toml and the Dockerfile agree on the toolchain; release binaries build inside reusable workflows per GitHub's SLSA Build L3 construction and each carries a signed provenance attestation on its digest. A rebuild resolves identical inputs.


  • インストールシステム


    プロジェクトは、プロジェクトで作成されたソフトウェアを一般的に使用されているやり方で簡単にインストールおよびアンインストールする方法を提供する必要があります。 [installation_common]
    たとえば、パッケージマネージャー(システムまたは言語レベル)、「make install / uninstall」(DESTDIRをサポート)、標準形式のコンテナー、または標準形式の仮想マシンイメージを使用することが挙げられます。インストールとアンインストールのプロセス(たとえば、パッケージング)は、FLOSSである限り、サードパーティによって実装されてもよいです。

    Three install paths, all published: prebuilt x86_64 and aarch64 Linux binaries attached to every release with a sha256sum, a CycloneDX SBOM and a Sigstore bundle; a multi-architecture container image on GHCR (ghcr.io/rubentalstra/veredictum); and the crate on crates.io (cargo install veredictum). The installation chapter carries the commands, including the gh attestation verify invocation: https://veredictum.eu/docs/installation.html



    エンドユーザ用のインストール システムは、インストール時にビルドされる生成物が書き込まれる場所を選択するための標準的な規則を守らなければなりません。たとえば、POSIXシステムにファイルをインストールする場合は、DESTDIR環境変数を守らなければなりません。インストール システムがない場合や標準的な規約がない場合は、「該当なし」(N / A)を選択します。 [installation_standard_variables]

    Each path follows its ecosystem's own convention rather than inventing one: cargo install honours CARGO_INSTALL_ROOT and --root for the install location (and cargo uninstall removes it), the release tarballs are relocatable single static binaries extracted wherever the operator chooses, and the container image is addressed by tag or digest with the catalogue and specification roots passed in as mounted paths rather than baked in.



    プロジェクトは、潜在的な開発者がすべてのプロジェクト結果を迅速にインストールし、テストやテスト環境を含む変更を行うために必要な環境を迅速にインストールする方法を提供しなければなりません。これは、一般に使用されている手法で実行する必要があります。 [installation_development_quick]
    これは生成されたコンテナおよび/またはインストール スクリプトを使用して実装できます。外部依存部分は、典型的には、external_dependenciesごとにシステムおよび/または言語パッケージマネージャを呼び出すことによってインストールされます。

    git clone, then cargo run -- validate --root artifacts --specs specs/openehr — the toolchain pins itself from rust-toolchain.toml, so there is nothing to install by hand, and cargo-nextest is the only extra tool and only if you intend to run the suite. CONTRIBUTING.md § Setup and § The gates carry the full sequence: https://github.com/rubentalstra/Veredictum/blob/main/CONTRIBUTING.md


  • 外部で維持管理されるコンポーネント


    プロジェクトは、外部依存関係をコンピュータ処理可能な方法でリストしなければなりません。 (URLが必要です) [external_dependencies]
    通常、これはパッケージ マネージャーやビルドシステムのやり方を使用して行われます。これは installation_development_quick の実装に役立ちます。

    Computer-processable, at three levels: Cargo.toml declares the direct dependency set with each pin commented for why it is there, the committed Cargo.lock is the exact resolved graph (this repository ships a binary, so it is committed deliberately), and every release attaches a generated SPDX repository SBOM plus a per-artifact CycloneDX SBOM, both Sigstore-attested. REUSE.toml declares the licensing of the vendored trees machine-readably: https://github.com/rubentalstra/Veredictum/blob/main/Cargo.toml



    プロジェクトは、既知の脆弱性を検出し、悪用可能な脆弱性を修正したり、悪用できない脆弱性として確認するために、外部の依存先(コンビニエンス コピーを含む)を監視または定期的にチェックしなければなりません。 [dependency_monitoring]
    これは、 OWASPのDependency-Check SinatypeのNexus Auditor SynopsysのBlack Duck Software Composition Analysis Bundler-audit (Rubyの場合)などのオリジンアナライザー/依存性検査ツールを使用して行うことができます。パッケージ マネージャーには、これを行うためのメカニズムが含まれています。コンポーネントの脆弱性を悪用することはできない場合、分析が難しいが、単に更新または修正する方が簡単なであれば、それは許容できます。

    Four lanes, all running: cargo-deny checks the graph against the RustSec advisory database on every pull request and push; Dependabot raises bump PRs with security updates exempt from the configured cooldowns; a scheduled latest-deps workflow detects in-range upstream breakage; and a weekly Trivy scan of the published container image files or updates its own tracking issue. An accepted advisory needs a published OpenVEX justification in security/vex/, which scripts/checks/vex-advisories.sh enforces: https://github.com/rubentalstra/Veredictum/blob/main/deny.toml



    プロジェクトは
    1. 再使用された外部管理コンポーネントの識別と更新を容易にできるようにしている、 または
    2. システムまたはプログラミング言語によって提供される標準コンポーネントを使用している
    のどちらかでなければなりません。そうすれば、再利用されたコンポーネントに脆弱性が見つかった場合に、そのコンポーネントを簡単に更新することができます。 [updateable_reused_components]
    この基準を満たす典型的な方法は、システムおよびプログラミング言語のパッケージ管理システムを使用することです。多くのFLOSSプログラムは、標準ライブラリーのローカルコピーである "コンビニエンス ライブラリー"と一緒に頒布されます(フォークされている可能性があります)。それ自体は、それでいいです。しかし、プログラムがこれらのローカルな(フォークされた)コピーを使用しなければならない場合、 セキュリティ アップデートとして"標準"ライブラリをアップデートすると、これらの追加のコピーは依然として脆弱のままです。これは、特にクラウド ベース システムの問題です。クラウド プロバイダが "標準"ライブラリを更新してもプログラムがそれらを使用しない場合、更新プログラムは実際には役に立ちません。たとえば、「Chromium:適切なパッケージとしてFedoraにまだない理由は何ですか?」Tom Callaway著を参照してください。

    Every reused component is identified and updateable in place. Rust dependencies are ordinary cargo pins in one workspace table with a committed lockfile — no vendored or forked crate copies exist. The vendored material that does exist is specification text and clinical-model corpora, not code: it is fetched by committed scripts (scripts/vendor/adl2-archetypes.sh, ckm-archetypes.sh, ckm-templates.sh), hand-editing it is a hard rule violation, and the fix for any finding inside it is always the script plus a re-run, so an update is a re-vendor rather than a patch to maintain.



    プロジェクトは、使用するテクノロジ セット(その "テクノロジ スタック")において、プロジェクトがサポートするユーザの超大多数がFLOSSの代替案を利用可能な(ユーザが代替手段にアクセスしている)場合には、評価の低いまたは時代遅れの機能とAPIの使用を避けるべきです。 [interfaces_current]

    The interface documentation is generated from the same source tree, so it cannot lag the code: the published API documentation is complete (https://docs.rs/veredictum — 100% of the crate documented, with missing_docs as a lint), the JSON Schemas in schemas/ are emitted by the instrument itself and drift-tested against the committed copies, and scripts/checks/site-counts.sh fails if the counts the site states disagree with what validate reports. The command reference chapter documents every subcommand: https://veredictum.eu/docs/commands.html


  • 自動テスト スイート


    少なくとも1つのブランチの共有リポジトリへの各チェックインに対して、自動テスト スイートが適用される必要があります。このテスト スイートは、テストの成功または失敗に関するレポートを生成しなければなりません。 [automated_integration_testing]
    この要件は、test_continuous_integrationのサブセットと見ることができますが、継続的な統合を範囲外として、テストだけに焦点を当てています。

    Integration testing runs above the unit level on every pull request and push: cargo nextest run over the whole workspace including the console's SSR suite, veredictum validate over the entire artifact tree (every machine gate over 1103 cases and 247 bindings, zero findings the only passing result), the console journey tests driving the composed console end to end through a browser, and a screenshot guard that fails when a new screen arrives without a capture. An opt-in mode (UI_E2E_REAL_SUTS=1) composes two real CDRs — FerroEHR's published quickstart and EHRbase's official image pairing — and drives the full wizard against each: https://github.com/rubentalstra/Veredictum/actions/workflows/ci.yml



    プロジェクトは、過去6ヶ月以内に修正されたバグの少なくとも50%について、自動テスト スイートに回帰テストを追加しなければなりません。 [regression_tests_added50]

    Applied as a rule rather than a habit: CONTRIBUTING.md § Hard rules forbids weakening, skipping or deleting a test or editing one to route around the defect it exposes, and requires a failing test with a TODO naming its issue when the fix is unclear. In practice, the three document-processing defects the fuzzing lane found (literal nesting depth, brace-expansion variants, a citation-resolution stack overflow) each shipped in 0.1.0-alpha.4 with its pinned regression test and its corpus entry kept: https://github.com/rubentalstra/Veredictum/releases



    プロジェクトは、選択された言語でこの基準を測定できる少なくとも1つのFLOSSツールがある場合、少なくとも80%のステートメントカバレッジを提供するFLOSS自動テストスイートを備えていなければなりません。 [test_statement_coverage80]
    gcov/lcov、Blanket.js、Istanbul、JCov、covr (R) など、多くのFLOSSツールが、テストカバレッジを測定できます。この基準を満たすことは、テスト スイートが徹底していることを保証するものではないですが、それよりも、この基準を満たさないことは、貧弱なテスト スイートであることを示す強い指標であることに注意してください。

    Statement coverage is above 80%, measured by cargo-llvm-cov and published continuously by SonarQube Cloud, whose live coverage badge sits in the README badge row: https://sonarcloud.io/component_measures?id=rubentalstra_Veredictum&metric=coverage . The Sonar lane runs the suite under cargo-llvm-cov and imports the merged lcov through sonar.rust.lcov.reportPaths on every pull request and push. The coverage denominator is deliberately narrower than the analysis scope, with each exclusion carrying its reason in sonar-project.properties: the suite does not measure itself, the CLI entry point is argument plumbing over library functions the suite already drives, and the two document-renderer modules are checked by regenerate-and-diff against committed artifacts rather than by a unit assertion.


  • 新機能テスト


    プロジェクトには、主要な新機能が追加されると、新しい機能のテストが自動化されたテスト スイートに追加されなければならないという正式な文書化されたポリシーがなければなりません。 [test_policy_mandated]

    CONTRIBUTING.md § Pull requests requires tests to accompany behaviour changes and § Hard rules makes the test discipline non-negotiable (never weaken, skip or delete a test; coverage ratchets up only; a case is added, never removed to make a run green). CI refuses a pull request whose suite is not green, behind the single required conclusion check: https://github.com/rubentalstra/Veredictum/blob/main/CONTRIBUTING.md



    プロジェクトは、変更提案のための文書化された手順に、重要な新機能用にテストを追加するという方針を含まなければなりません。 [tests_documented_added]
    しかし、実際にテストが追加されている限り、非公式の規則でも許容されます。

    Documented in CONTRIBUTING.md as a stated requirement on every contributor, with the full working discipline in CLAUDE.md, and the gate commands listed so a contributor can run exactly what CI will run: https://github.com/rubentalstra/Veredictum/blob/main/CONTRIBUTING.md


  • 警告フラグ


    プロジェクトによって作成されたソフトウェアにある警告に、実際的な場合には、最大限に厳格にならなければなりません。 [warnings_strict]
    一部の警告は、あるプロジェクトでは効果的に有効にすることはできません。必要なのは、プロジェクトが可能な限り警告フラグを有効にするように努力しており、エラーが早期に検出されるという証拠です。

    Well beyond the defaults. The workspace lint tables put clippy::all and clippy::pedantic at deny and then name dozens of specific bug-class lints at deny (unwrap_used, expect_used, panic, panic_in_result_fn, indexing_slicing, string_slice, as_conversions, iter_over_hash_type, precedence_bits, unchecked_time_subtraction, allow_attributes_without_reason and more, each with its reason in a comment), and the rust table sets unsafe_code = forbid, non_ascii_idents = forbid, dead_code = deny and let_underscore_drop/lock = deny. CI runs clippy with -D warnings on every target, so any of them fails the build: https://github.com/rubentalstra/Veredictum/blob/main/Cargo.toml


 セキュリティ 13/13

  • セキュリティに関する開発知識


    適用できる場合、プロジェクトはセキュア設計原則(「know_secure_design」から)を実装しなければなりません。プロジェクトでソフトウェアが作成されていない場合は、「該当なし」(N / A)を選択します。 [implement_secure_design]
    たとえば、プロジェクトの結果は、フェール セーフのデフォルト値を持つべきです(デフォルトではアクセスの決定は拒否されるべきで、プロジェクトのインストールはデフォルトでセキュリティ保護されているべきです)。また、完全なメディエーションであるべきです(制限されているすべてのアクセスは、権限がチェックされバイパス不可能でなければなりません)。原則が矛盾する場合があります。その場合、選択が必要です(たとえば、多くの仕組みは、「機構の節約」に反して複雑にすることも、単純にすることもできます)。

    The security-relevant design is structural, and ASSURANCE_CASE.md § 2 states the boundaries it rests on (https://github.com/rubentalstra/Veredictum/blob/main/ASSURANCE_CASE.md). A verdict is a pure function of four inputs — the party's statement, the recorded results, the catalogue and the capability matrix — so no server-controlled value can influence its own result, and two independent runners given those inputs must compute identical verdicts; the verification pack exists to check exactly that, so the instrument is not trusted on its own word. The system under test is untrusted by definition: its responses are evidence in a comparison, never instructions, and an expectation is refuted by a better reading of the released specification and by nothing else. Records are sealed with a byte-deterministic SHA-256 digest manifest and a detached RFC 9580 signature that verify-record recomputes — and that plain gpg --verify checks without this binary present — with typed refusals for a manifest entry that would read outside the bundle or silently replace another digest; a performance class is re-derived from the embedded HDR histograms rather than read from a stored summary. Credentials are unrepresentable inline: the IXIT holds environment-variable names and a declared key path, never a secret. Least privilege in the supply chain: ephemeral per-run tokens, crates.io Trusted Publishing with no stored token, and a reviewer-gated environment on the one irreversible leg.


  • 優良な暗号手法を使用する

    一部のソフトウェアは暗号化メカニズムを使用する必要がないことに注意してください。あなたのプロジェクトが作成するソフトウェアが、(1) 暗号化機能を含む、アクティブ化する、または有効化し、(2) 米国(US)から米国外または米国市民以外にリリースされる可能性がある場合は、法的に義務付けられた追加手順の実行を要求される可能性があります。通常、これにはメールの送信が含まれます。詳細については、 Understanding Open Source Technology & US Export Controls「オープンソース技術と米国の輸出管理について」)の暗号化のセクションを参照してください。

    プロジェクトによって作成されたソフトウェア内のデフォルトのセキュリティ メカニズムは、既知の重大な脆弱性を持つ暗号アルゴリズムやモード(たとえば、SHA-1暗号ハッシュ アルゴリズムまたはSSHのCBC モード)に依存してはいけません。 [crypto_weaknesses]
    SSHのCBCモードに関する懸念事項は、 CERT: SSH CBC 脆弱性にて議論されています。.

    No broken or weak primitive is used or accepted: SHA-256 throughout with no truncation, no MD5, no SHA-1, no DES/3DES/RC4, and TLS through rustls, which implements 1.2 and 1.3 only. Signature verification is a real check rather than a formality — verify-record recomputes every digest and verifies the detached signature, so a substituted byte fails.



    プロジェクトは複数の暗号アルゴリズムをサポートするべきですので、ユーザーは破られた場合に素早く切り替えることができます。一般的な対称鍵アルゴリズムには、AES、Twofish、およびSerpentがあります。一般的な暗号化ハッシュ アルゴリズムには、SHA-2(SHA-224、SHA-256、SHA-384およびSHA-512を含む)およびSHA-3があります。 [crypto_algorithm_agility]

    Corrected and stated precisely, because it is narrower than a plain no. The record format IS agility-ready: the manifest carries a digest_algorithm identifier naming the algorithm every digest below it was taken with, and verification refuses a manifest signed under the wrong algorithm (app/veredictum/src/record.rs), so adding SHA-512 or SHA-3 is a new enum variant and a match arm rather than a format break. The negotiating layers are agile by construction too — TLS versions and suites are negotiated by rustls, and an OpenPGP signature carries its own hash-algorithm identifier. What is not true today is the criterion's own test: only SHA-256 is implemented, so an operator cannot switch if it breaks. The trigger is a second DigestAlgorithm variant with its selection surface, which belongs on an issue before it is claimed here.



    プロジェクトは、他の情報(構成ファイル、データベース、ログなど)とは別にしたファイルに、認証資格情報(パスワードやダイナミックトークンなど)やプライベート暗号鍵を格納することをサポートしなければなりませんし、ユーザーがコードの再コンパイルなしにそれらを更新や置き換えできるように許可しなければなりません。プロジェクトが認証資格情報とプライベート暗号化鍵を決して処理しない場合は、「該当なし」(N/A)を選択します。 [crypto_credential_agility]

    Nothing is embedded and nothing needs a recompilation to change. A credential for the system under test never enters the repository at all: the party's IXIT declares only the NAME of the environment variable that carries it, so the secret stays in the operator's environment and out of the catalogue, the records and the logs. The signing key is a file path passed as --sign-key at the moment it is used and is never stored by the tool. The project's own publishing credentials store no secret either — the release lane runs on an ephemeral per-run GITHUB_TOKEN and the crate publishes through crates.io Trusted Publishing (OIDC), as recorded identity by identity in MAINTAINERS.md: https://github.com/rubentalstra/Veredictum/blob/main/MAINTAINERS.md



    プロジェクトで作成されたソフトウェアは、ネットワーク通信すべてに対して、SSHv2以降、TLS1.2以降 (HTTPS)、IPsec、SFTP、SNMPv3などのセキュア プロトコルをサポートするべきです。FTP、HTTP、telnet、SSLv3以前、およびSSHv1などのセキュアでないプロトコルは、デフォルトで無効にし、ユーザーが特別に設定した場合のみ有効にするべきです。プロジェクトによって作成されたソフトウェアがネットワーク通信をサポートしない場合は、「該当なし」(N/A)を選択します。 [crypto_used_network]

    All network security uses standard published protocols, never bespoke transport cryptography: TLS through rustls on every outbound connection (reqwest is configured with default features off and the rustls feature on, so no platform TLS backend is silently substituted), and JWT (RFC 7519) bearer authentication against a system under test.



    プロジェクトによって作成されたソフトウェアは、TLSをサポートあるいは使用する場合、少なくともTLSバージョン1.2をサポートするべきです。TLSの前身は、SSLと呼ばれていたことに注意して下さい。ソフトウェアがTLSを使用ない場合、「該当なし」(N/A)を選択します。 [crypto_tls12]

    The TLS stack is rustls, which implements TLS 1.2 and 1.3 only — an older protocol version is not representable in the library, so there is nothing to disable and no configuration switch that could re-enable one.



    TLSをサポートしている場合、プロジェクトで作成されたソフトウェアは、TLSを使う時には、サブリソースを含めて、デフォルトでTLS認証を受けなければなりません。ソフトウェアがTLSを使用しない場合、「該当なし」(N/A)を選択します。 [crypto_certificate_verification]
    誤ったTLS認証の検証は、よくある間違いであることに注意して下さい。詳細については、「世界でもっとも危険なコード:非ブラウザー ソフトウェアでのSSL認証の検証」Martin Georgiev et al著「このアプリケーションを信頼しますか?」Michael Catanzaro著.を参照して下さい。

    rustls with webpki certificate verification is the default on every outbound TLS connection, and there is no escape hatch: no danger_accept_invalid_certs, no accept_invalid_hostnames and no insecure or no-verify option is exposed anywhere in the configuration surface or the code.



    TLSをサポートしている場合、プロジェクトによって作成されたソフトウェアは、(たとえばセキュアクッキーなど)プライベートな情報をHTTPヘッダと共に送信する前に、証明書の検証をしなければなりません。ソフトウェアがTLSを使用しない場合は、「該当なし」(N/A)を選択します。 [crypto_verification_private]

    Certificate verification happens before anything private is sent: the client is rustls with webpki verification and no way to switch it off, so the JWT bearer token and any basic-auth credential for the system under test only ever travel over a verified TLS session. Private keys are never transmitted or logged — signing is done locally from a key path the operator passes, only the detached signature leaves the process, and pointer_format is a denied lint so addresses cannot leak into Debug output either.


  • 公開物の安全性


    プロジェクトは、広く普及することを意図しているプロジェクト結果のリリースには暗号で署名しなければなりませんし、パブリック署名鍵を入手して署名を検証する方法をユーザに説明するプロセスがなければなりません。これらの署名の秘密鍵は、ソフトウェアを一般に直接配布するために使用されるサイトにあってはなりません。リリースが広く普及することを意図していない場合は、「該当なし」(N/A)を選択します。 [signed_releases]
    プロジェクトの結果には、ソースコードと生成された成果物(実行可能ファイル、パッケージ、コンテナなど)が含まれます。生成された成果物は、ソースコードとは別に署名することができます。これらは、(暗号デジタル署名を使用して)署名付きgitタグとして実装できます。プロジェクトはgitのようなツールとは別に生成された結果を提供するかもしれませんが、そのような場合、別々の結果を別々に署名しなければなりません。

    Every release is cryptographically signed and independently verifiable. Each artifact carries a Sigstore bundle and a provenance attestation on its digest, built inside reusable workflows per GitHub's documented SLSA Build L3 construction, alongside sha256 sums, a per-artifact CycloneDX SBOM and a generated SPDX repository SBOM that is itself attested; a release step refuses to publish unless every expected asset is attached, and immutable releases are enabled so the assets and tag freeze at publish. Verification is a documented one-liner — gh attestation verify <artifact> -R rubentalstra/Veredictum --signer-workflow rubentalstra/Veredictum/.github/workflows/release-build.yml : https://veredictum.eu/docs/installation.html



    バージョン管理システムでは、 signed_releases で説明されているように、重要なバージョンタグ(メジャーリリース、マイナーリリース、または公開されている脆弱性の一部であるタグ)を暗号署名して検証することが推奨されています。 [version_tags_signed]

    Release tags are OpenPGP-signed by the maintainer key documented in MAINTAINERS.md, and this is enforced rather than customary: the refs/tags/v* ruleset (no bypass) requires a signature and forbids deleting or non-fast-forward-updating a tag, which protects the exact window in which a tag drives the release build. Every commit in the history is signature-verified under the main ruleset as well: https://github.com/rubentalstra/Veredictum/tags


  • その他のセキュリティ上の課題


    プロジェクトの結果は、潜在的に信頼できないソースからのすべての入力をチェックして有効であること(*allowlist*)を確認し、データに何らかの制限がある場合は無効な入力を拒否しなければなりません。 [input_validation]
    攻撃者はしばしばブラックリストを回避することができるので、入力を "不正な形式" のリスト(別名*denylist*)と比較するのは、通常十分ではないことに注意してください。特に、数値は内部形式に変換され、最小値と最大値の間であるかがチェックされますし、文字列は、有効なテキストパターン(有効なUTF-8、長さ、構文など)であることを確認するためにチェックされます。一部のデータは「何でもよい」(たとえばファイル アップローダー)ことがありますが、通常はまれです。

    Input is validated against a whitelist by construction, not sanitized after the fact. Artifact and party documents are read through strict typed constructors and refused on undeclared or duplicate keys; the catalogue itself is gated by veredictum validate, where zero findings is the only passing result (id uniqueness, citation resolution against the vendored specification text, binding completeness, and coverage of the enumerated wire surface); AQL and citation input is parsed by grammar-exact parsers that reject rather than guess; and every refusal is kept as its own pinned negative test, so a lenient acceptance is a failing test. The lint set removes the classic silent-acceptance paths (indexing_slicing, string_slice, as_conversions all denied). Every reader that parses outside input has a fuzz harness: https://github.com/rubentalstra/Veredictum/blob/main/fuzz/README.md



    プロジェクトによって作成されたソフトウェアで強化メカニズムを使用するべきですので、ソフトウェア欠陥がセキュリティ上の脆弱性を引き起こす可能性が低くなります。 [hardening]
    強化メカニズムは、Content Security Policy(CSP)などのHTTPヘッダー、攻撃を緩和するコンパイラ フラグ(-fstack-protectorなど)、または未定義の動作を排除するためのコンパイラ フラグを含みます。私たちの目的のために、最低限の特権は強化メカニズムとはみなされません(最低の特権は重要ですが、別の話です)。

    The container image is hardened and the hardening is machine-checked: a digest-pinned distroless base (gcr.io/distroless/cc-debian13:nonroot) with an explicit numeric USER 65532:65532 so an orchestrator does not have to resolve a name, no shell and no package manager in the runtime layer, a HEALTHCHECK, OCI metadata that a CI guard (scripts/checks/image-labels.sh) checks agrees with itself, hadolint over the Dockerfile on every pull request and Trivy over the published image weekly. The console binds to loopback unless the operator explicitly publishes it. On the process side the release profile keeps overflow-checks = true, and unsafe_code = forbid removes the memory-unsafety class outright: https://github.com/rubentalstra/Veredictum/blob/main/docker/Dockerfile



    プロジェクトは、そのセキュリティ要件が満たされていることを証明する保証ケースを提供しなければならない。保証ケースには、脅威モデルの説明、信頼境界の明確な識別、セキュアな設計原則が適用されていることの議論、共通の実装セキュリティの弱点が対処されたことの議論が含まれなければならない。 (URLが必要です) [assurance_case]
    保証ケースは、「システムのプロパティに関する特定の一連の重大なクレームが、特定の環境とアプリケーションに対して適切に正当化されていることを説得力のある正当な議論で示す証拠」である(「構造化された保証ケースモデルを使用したソフトウェア保証」、Thomas Rhodes他、NIST Interagency Report 7608 )。信頼境界は、データまたは実行がその信頼レベル、例えば、典型的なウェブアプリケーションにおけるサーバの境界、を変更する境界である。安全な設計原則(SaltzerやSchroeerなど)と一般的な実装セキュリティの弱点(OWASPトップ10やCWE / SANSトップ25など)をリストし、それぞれがどのように対抗しているかを示すのは一般的です。 BadgeAppの保証ケースは良い参考例になるかもしれません。これは、documentation_security、documentation_architecture、およびimplement_secure_designに関連しています。

    ASSURANCE_CASE.md is the assurance argument, and every row names a file in this repository so each claim can be opened and checked: https://github.com/rubentalstra/Veredictum/blob/main/ASSURANCE_CASE.md . § 1 states the assets an attacker would want (verdict integrity — a wrong green is the worst outcome the product has; record integrity across the bundle, the release tarball and the image; confidentiality of the operator's inputs). § 2 is the trust-boundary table: the catalogue and vendored specifications as trusted-and-gated (validate at zero findings, entry point named), the system under test as untrusted by definition (its responses are evidence in a comparison, never instructions, and it cannot move the reference it is measured against), the operator's IXIT holding credential references only so an inline secret is unrepresentable, every console #[server] fn as a public endpoint bound to loopback by default, and the published record as tamper-evident without this tool (byte-deterministic SHA-256 manifest plus an RFC 9580 detached signature that plain gpg --verify checks). § 3 pairs each security-relevant requirement with the check that fails on violation (unsafe_code = forbid, the denied panic and indexing families, overflow-checks, typed errors at every branching boundary). § 4 names the three rules enforced by review alone rather than hiding them — on the project's own principle that a rule with no failing check is a wish. § 5 states what the case does not claim: no formal verification, no console authentication by design, no sanitizing of what is recorded, and that a verified signature says nothing about the conditions the run executed under. The reporting route stays in SECURITY.md, and a stale claim on that page is handled as a defect in the assurance case.


 分析 2/2

  • 静的コード解析


    プロジェクトは、選択された言語でこの基準を実装できる少なくとも1つのFLOSSツールがある場合、解析された言語または環境で共通の脆弱性を探すためのルールまたはアプローチを備えた少なくとも1つの静的解析ツールを使用しなければならなりません。 [static_analysis_common_vulnerabilities]
    一般的な脆弱性を探すために特別に設計された静的解析ツールは、それらを見つける可能性が高いです。つまり、静的ツールを使用すると、通常は問題を見つけるのに役立ちますので、利用を提案しますが、「合格」レベルのバッジには要求しません。

    At least one analyser looks specifically for common vulnerability classes on every pull request: CodeQL runs its security query suites over the Rust and GitHub Actions sources on every push and pull request and again weekly, SonarQube Cloud publishes a security rating on the same events, zizmor audits the workflows for the Actions-specific classes (unpinned uses, credential-persisting checkouts, injectable contexts) at --min-severity=low, Trivy scans the published image, and cargo-deny checks the graph against the RustSec advisory database: https://github.com/rubentalstra/Veredictum/actions/workflows/codeql.yml


  • 動的コード分析


    もしプロジェクトで作成されたソフトウェアにメモリ安全でない言語(CやC ++など)を使用して作成されたソフトウェアが含まれているならば、そのときには 少なくとも1つの動的ツール(たとえば、ファジーまたはウェブ アプリケーション スキャナ)を、バッファの上書きなどのメモリの安全性の問題を検出するメカニズムと一緒にいつも使用します。プロジェクトがメモリ安全でない言語で書かれたソフトウェアを作成しない場合は、「該当なし」(N/A)を選択します。 [dynamic_analysis_unsafe]
    メモリの安全性の問題を検出するメカニズムの例としては、アドレスサニタイザー(ASAN)(GCCおよびLLVMで利用可能)、 Memory Sanitizer 、および valgrind が含まれます。他に使用される可能性のあるツールには、スレッドサニタイザ定義されていない動作サニタイザを参照してください。広範なアサーションも機能します。

    There is no memory-unsafe code to analyse. unsafe_code = "forbid" applies to the whole workspace, and forbid cannot be relaxed by an attribute — not even #[allow] compiles under it — so introducing unsafe would require a deliberate change to stop inheriting the lint table rather than a local suppression. The libFuzzer harnesses still run over every outside-input reader with sanitizer instrumentation regardless: https://github.com/rubentalstra/Veredictum/blob/main/Cargo.toml



ツールやAIシステムを使って、https://www.bestpractices.dev/ja/projects/14252/choose/edit?osps_ac_01_01_status=Met&osps_ac_01_01_justification=GitHub+enforcedのような簡単なURLで変更を提案できます。その方法については、自動化提案システムをご覧ください。 このデータは、Community Data License Agreement – Permissive, Version 2.0 (CDLA-Permissive-2.0)のもとで利用可能です。これは、データ受領者が、データ受領者がこの契約のテキストを共有データとともに利用可能にする限り、変更の有無にかかわらずデータを共有できることを意味します。Ruben TalstraおよびOpenSSFベストプラクティスバッジのコントリビューターにクレジットを表示してください。

プロジェクト バッジ登録の所有者: Ruben Talstra.
エントリの作成日時 2026-08-26 14:17:43 UTC、 最終更新日 2026-08-27 17:48:50 UTC 最後に2026-08-27 15:20:01 UTCにバッジ合格を達成しました。