Basis CLI

Projekte, die den nachfolgenden Best Practices folgen, können sich freiwillig selbst zertifizieren und zeigen, dass sie einen Core-Infrastruktur-Initiative-/OpenSSF-Badge erhalten haben.

Es gibt keine Auswahl an Praktiken, die garantieren können, dass Software niemals Fehler oder Schwachstellen hat. Selbst formale Methoden können fehlschlagen, wenn die Spezifikationen oder Annahmen falsch sind. Auch gibt es keine Auswahl an Praktiken, die garantieren können, dass ein Projekt eine gesunde und gut funktionierende Entwicklungsgemeinschaft erhalten wird. Allerdings können Best Practices dabei helfen, die Ergebnisse von Projekten zu verbessern. Zum Beispiel ermöglichen einige Praktiken die Mehrpersonen-Überprüfung vor der Freigabe, die sowohl helfen können ansonsten schwer zu findende technische Schwachstellen zu finden und gleichzeitig dazu beitragen Vertrauen und den Wunsch nach wiederholter Zusammenarbeit zwischen Entwicklern verschiedener Unternehmen zu schaffen. Um ein Badge zu verdienen, müssen alle MÜSSEN und MÜSSEN NICHT Kriterien erfüllt sein, alle SOLLTEN Kriterien müssen erfüllt sein oder eine Rechtfertigung enthalten, und alle EMPFHOLEN Kriterien müssen erfüllt sein oder nicht (wir wollen sie zumindest berücksichtigt wissen). Wenn lediglich ein allgemeiner Kommentar angebeben werden soll, keine direkte Begründung, dann ist das erlaubt, wenn der Text mit "//" und einem Leerzeichen beginnt. Feedback ist willkommen auf derGitHub-Website als Issue oder Pull-Request. Es gibt auch eine E-Mail-Liste für allgemeine Diskussionen.

Wir stellen Ihnen gerne die Informationen in mehreren Sprachen zur Verfügung, allerdings ist die englische Version maßgeblich, insbesondere wenn es Konflikte oder Inkonsistenzen zwischen den Übersetzungen gibt.
Wenn dies Ihr Projekt ist, zeigen Sie bitte Ihren Badge-Status auf Ihrer Projektseite! Der Badge-Status sieht so aus: Badge-Level für Projekt 14224 ist silver So können Sie ihn einbetten:
Sie können Ihren Badge-Status anzeigen, indem Sie Folgendes in Ihre Markdown-Datei einbetten:
[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/14224/badge)](https://www.bestpractices.dev/projects/14224)
oder indem Sie Folgendes in Ihr HTML einbetten:
<a href="https://www.bestpractices.dev/projects/14224"><img src="https://www.bestpractices.dev/projects/14224/badge"></a>


Dies sind die Kriterien das Level Silber. Sie können auch die Kriterien für die Level Passing oder Gold sehen.

Baseline Series: Baseline Niveau 1 Baseline Niveau 2 Baseline Niveau 3

        

 Grundlagen 17/17

  • Allgemein

    Hinweis: Andere Projekte können den selben Namen benutzen.

    Basis CLI is the command-line client for Basis Network. This repository — and this badge entry — is what distributes and verifies it: the download script that checks every binary against a SHA-256 committed to git, the checksums themselves, the release workflow that verifies each published asset and then signs it with Sigstore in keyless mode, the test suite covering all of that, and the documentation. The compiled basis binary is built from basis-core, which is not public yet. Everything in this repository is Apache-2.0 with its source, and every file carries its copyright and licence, checked in CI against version 3.3 of the REUSE Specification.

    Bitte verwenden Sie das SPDX-License-Expression-Format; Beispiele sind "Apache-2.0", "BSD-2-Clause", "BSD-3-Clause", "GPL-2.0+", "LGPL-3.0+", "MIT" und "(BSD-2-Clause OR Ruby)". Geben sie nicht die einfachen oder doppelten Anführungszeichen mit an.
    Wenn es mehr als eine Programmiersprache gibt, listen Sie sie als kommagetrennte Werte (Leerzeichen sind optional) auf und sortieren Sie sie von am häufigsten zum am wenigsten verwendeten. Wenn es eine lange Liste gibt, bitte mindestens die ersten drei häufigsten auflisten. Wenn es keine Programmiersprache gibt (z. B. ist dies nur ein Dokumentations- oder Testprojekt), verwenden Sie das einzelne Zeichen "-". Bitte verwenden Sie eine herkömmliche Großschreibung für jede Sprache, z.B. "JavaScript".
    Das Common Platform Enumeration (CPE) ist ein strukturiertes Namensschema für IT-Systeme, Software und Pakete. Es wird in diversen Systemen und Datenbanken bei der Meldung von Schwachstellen verwendet.
  • Voraussetzungen


    Das Projekt MUSS ein bestimmtes Level erreichen. [achieve_passing]

  • Grundlegende Informationen auf der Projektwebseite


    Die Informationen darüber, wie man mitwirken kann, MÜSSEN die Anforderungen für akzeptable Beiträge (z.B. einen Hinweis auf einen erforderlichen Codierungsstandard) enthalten. (URL erforderlich) [contribution_requirements]

    The same document lists them: make check (the test suite) and make lint (shellcheck over both scripts, reuse lint over every file) must pass; a change to what download.sh does must come with a test; every new file needs an SPDX header or a REUSE.toml entry; every commit needs a Signed-off-by line. All of it is enforced by required CI checks on main, not just asked for. https://github.com/basis-network/basis-cli/blob/main/CONTRIBUTING.md#making-a-change


  • Projektüberwachung


    Das Projekt SOLLTE einen rechtlichen Mechanismus haben, wo alle Entwickler von nicht-trivialen Beiträgen versichern, dass sie rechtlich ermächtigt sind, diese Beiträge zu machen. Der häufigste und leicht umsetzbare Ansatz, ist die Verwendung eines Developer Certificate of Origin (DCO) , wo Benutzer "signed-off-by" in ihren Commits und die Projektlinks zur DCO-Website hinzufügen. Allerdings DARF dies als Contributor License Agreement (CLA) oder als ein anderer rechtlicher Mechanismus implementiert werden. (URL erforderlich) [dco]
    Die DCO ist der empfohlene Mechanismus, weil er einfach zu implementieren ist, im Quellcode verfolgt wird und git direkt eine "signed-off" Funktion mit "commit -s" unterstützt. Um am effektivsten zu sein, ist es am besten, wenn die Projektdokumentation erklärt, was "signed-off" für dieses Projekt bedeutet. Eine CLA ist eine rechtliche Vereinbarung, die die Bedingungen definiert, unter denen intellektuelle Werke an eine Organisation oder ein Projekt lizenziert wurden. Ein Contributor Assignment Agreement (CAA) ist eine gesetzliche Vereinbarung, die die Rechte an einer intellektuellen Arbeit an eine andere Person überträgt; Projekte müssen keine CAAs haben, da CAA das Risiko erhöht, dass potenzielle Mitwirkende nicht dazu beitragen werden, vor allem, wenn der Empfänger eine gewinnorientierte Organisation ist. Die Apache Software Foundation CLAs (die individuelle Contributor-Lizenz und die Corporate CLA) sind Beispiele für CLAs, für Projekte, die bestimmt haben, dass die Risiken dieser CLAs für das Projekt geringen sind als ihre Vorteile.

    The project uses the Developer Certificate of Origin 1.1. CONTRIBUTING.md has a section explaining what signing off means, that it is not a copyright assignment, that the contributor keeps their copyright, and that it asserts the right to contribute the code. It shows git commit -s and the Signed-off-by line it produces, asks for a real name and a working address, and states that commits without a sign-off cannot be merged. Every commit in this repository carries the line, maintainers included. https://github.com/basis-network/basis-cli/blob/main/CONTRIBUTING.md#sign-your-work--the-dco



    Das Projekt MUSS eindeutig sein Projekt-Governance-Modell (die Art, wie es Entscheidungen fällt, einschließlich der wichtigsten Rollen) definieren und dokumentieren. (URL erforderlich) [governance]
    Es muss einen gut dokumentierten, etablierten Weg geben, Entscheidungen zu treffen und Streitigkeiten zu lösen. In kleinen Projekten kann dies so einfach sein wie, "der Projektinhaber und -Leiter trifft alle endgültigen Entscheidungen". Es gibt verschiedene Führungs-Modelle, darunter wohlwollender Diktator und formale Meritokratie; Für weitere Details siehe Governance-Modelle . Sowohl zentralisierte (z.B. Single-Maintainer) als auch dezentrale (z.B. Gruppen-Maintainer) Ansätze wurden erfolgreich in Projekten verwendet. Die Governance-Informationen müssen nicht die Möglichkeit einer Projektspaltung dokumentieren, da dies für FLOSS-Projekte immer möglich ist.

    GOVERNANCE.md documents the model. It is a small project with two maintainers, and it says so rather than describing a committee that does not exist. It names who has final say, how decisions are made for each class of change (documentation and script changes by pull request; anything that changes what the repository vouches for goes in the CHANGELOG with its reasoning), how someone becomes a maintainer, how releases are made, and how the document itself is changed. It is also explicit about what it cannot decide: the CLI's own behaviour is built from basis-core and that decision belongs to that team. https://github.com/basis-network/basis-cli/blob/main/GOVERNANCE.md



    Das Projekt MUSS einen Code of Conduct etablieren und an einem üblichen Ort veröffentlichen. (URL erforderlich) [code_of_conduct]
    Projekte können das Miteinander ihrer Gemeinschaft verbessern und Erwartungen in Bezug auf akzeptables Verhalten setzen, indem sie einen Verhaltenskodex verfassen. Dies kann helfen, Probleme zu vermeiden, bevor sie auftreten, und das Projekt zu einem einladenderen Ort zu machen. Dies sollte sich nur auf das Verhalten innerhalb der Gemeinschaft/ am Arbeitsplatz des Projekts konzentrieren. Beispielhafte Verhaltenskodizes sind der Linux Kernel Code of Conduct, der Contributor Covenant Code of Conduct, der Debian Code of Conduct, der Ubuntu Code of Conduct, der Fedora Code of Conduct, der GNOME Code Of Conduct, der KDE Community Code of Conduct, der Python Community Code of Conduct, die Ruby Community Conduct Guideline und der Rust Code of Conduct.

    Contributor Covenant 2.1, at the standard location in the repository root, so GitHub surfaces it in the community profile and in the contribution flow. CONTRIBUTING.md links to it and states that participating means agreeing to it. Enforcement contact is conduct@basisnetwork.com.co, a mailbox that exists only for this and is read by the maintainers. https://github.com/basis-network/basis-cli/blob/main/CODE_OF_CONDUCT.md



    Das Projekt MUSS klar und deutlich die Rollen- auf Aufgabenverteilung dokumentieren, inklusive einzelnen Tätigkeiten, die von den Rollenträgern ausgeführt werden müssen. Es MUSS eindeutig sein wer welche Rolle hat, auch wenn es in anderer Form dokumentiert ist. (URL erforderlich) [roles_responsibilities]
    Die Dokumentation für Governance und Rollen und Verantwortlichkeiten können an einem Ort sein.

    GOVERNANCE.md has a table of every role, who holds it, and what it obliges them to do: lead maintainer (final say, breaking ties), maintainer (reviewing and merging, committing checksums before a release is published, publishing releases, triaging issues), security contact (reading the private advisory queue, acknowledging within three working days, running the process in SECURITY.md to disclosure), licence compliance, and organisation owner. Both people are named with their GitHub accounts. One row is deliberately held by nobody — release signing — because it is keyless and performed by the release workflow under its own OIDC identity, so there is no key for a person to hold, lose, or be coerced into using. https://github.com/basis-network/basis-cli/blob/main/GOVERNANCE.md#the-roles-and-who-holds-them



    Das Projekt MUSS in der Lage sein, mit minimaler Unterbrechung fortzufahren, wenn eine beliebige Person nicht in der Lage ist oder stirbt. Insbesondere MUSS das Projekt in der Lage sein, Probleme zu lösen, vorgeschlagene Änderungen zu akzeptieren und Versionen der Software freizugeben, innerhalb einer Woche nach der Bestätigung, dass eine Person nicht mehr in der Lage ist oder gestorben ist. Dies DARF sichergestellt werden, indem man jemandem anderes notwendige Schlüssel, Passwörter und gesetzliche Rechte gibt, um das Projekt fortzusetzen. Einzelpersonen, die ein FLOSS-Projekt ausführen, DÜRFEN dies durch die Bereitstellung von Schlüsseln in einer Lockbox und einer Willenserklärung zur Bereitstellung von erforderlichen gesetzlichen Rechten (z. B. für DNS-Namen). (URL erforderlich) [access_continuity]

    There are two maintainers, and they are equal in access rather than one being a nominal backup. Both are owners of the basis-network GitHub organisation and both are administrators of this repository, so either can open and close issues, accept proposed changes and publish a release without the other. That is well inside the one-week requirement — it needs no handover at all. There is no separate key or credential that would need recovering: releases are signed keylessly by the release workflow's OIDC identity, so nothing about publishing depends on a secret any individual holds. Two-factor authentication is required organisation-wide, and either owner can restore the other's access. https://github.com/basis-network/basis-cli/blob/main/GOVERNANCE.md#the-roles-and-who-holds-them



    Das Projekt SOLLTE einen Bus-Faktor von 2 oder mehr haben. (URL erforderlich) [bus_factor]
    Ein "bus factor" (aka "LKW-Faktor") ist die minimale Anzahl von Projektmitgliedern, die plötzlich aus einem Projekt ("hit by a bus") verschwinden müssen, bevor das Projekt aufgrund fehlender kompetenter Mitarbeiter stockt. Das Truck-Factor-Tool kann dies für Projekte auf GitHub schätzen. Weitere Informationen finden Sie unter Bewertung des Busfaktors von Git-Repositories von Cosentino et al.

    Two. Both maintainers have identical repository and organisation access and either can release on their own, which is what the criterion measures. Being exact about what that buys is worth more than the number: it removes the single point of failure for access, for releases and for a vulnerability report going unread. It does not yet mean every change gets a second pair of eyes — that is two_person_review at gold level, and this project does not claim it. GOVERNANCE.md says both of those things in the same paragraph. https://github.com/basis-network/basis-cli/blob/main/GOVERNANCE.md#who-decides


  • Dokumentation


    Das Projekt MUSS eine dokumentierte Roadmap, für mindestens das nächste Jahr haben, die beschreibt, was das Projekt beabsichtigt zu tun und nicht zu tun. (URL erforderlich) [documentation_roadmap]
    Das Projekt könnte die Roadmap nicht umsetzen, das ist ok; Der Zweck der Roadmap ist es, potenziellen Nutzern/innen und Entwicklern/innen zu helfen, die beabsichtigte Richtung des Projekts zu verstehen. Sie muss nicht detailliert sein.

    docs/ROADMAP.md covers the next twelve months and is split by what this repository can actually control. Scheduled here: a macOS build in the release matrix, signed version tags, recorded provenance for every published platform, branch coverage if a FLOSS tool for shell appears, and keeping the four documented rough edges accurate. Reported but not scheduled: the four CLI defects, which live in basis-core and cannot be fixed from here. It also lists what the project will not do — no long-term support branches, no CLI source in this repository, no binaries in git, no package-manager distribution before macOS ships, and no bug bounty — because a roadmap that only lists ambitions is half a document. https://github.com/basis-network/basis-cli/blob/main/docs/ROADMAP.md



    Das Projekt MUSS in der Dokumentation die Architektur (alias High-Level-Design) der vom Projekt entwickelten Software bereitstellen. Wenn das Projekt keine Software produziert, wählen Sie "nicht anwendbar" (N/A). (URL erforderlich) [documentation_architecture]
    Eine Softwarearchitektur erläutert die grundlegenden Strukturen eines Programms, d.h. die Hauptkomponenten des Programms, die Beziehungen zwischen ihnen und die Schlüsseleigenschaften dieser Komponenten und Beziehungen.

    docs/ARCHITECTURE.md documents the major components (the download script, the committed checksums, the release workflow that verifies and signs, the CI workflows, the test suite), the relationships among them, and the key properties of those relationships. It includes the download data flow from both sources to the verified file on disk, the five load-bearing properties of that flow with the test case that guards each, and the four trust regions with the boundary crossing that matters. The design in one sentence: a release serves the binary and git serves the checksum, so no single party controls both. It also states what the architecture does not claim, which is anything about the binary's behaviour. https://github.com/basis-network/basis-cli/blob/main/docs/ARCHITECTURE.md



    Das Projekt MUSS dokumentieren, was der/die Benutzer/in in Bezug auf die Sicherheit der Projektsoftware (seine "Sicherheitsanforderungen") erwarten kann und nicht erwarten kann. (URL erforderlich) [documentation_security]
    Dies sind Sicherheitsanforderungen, die die Software erfüllen soll.

    SECURITY.md has a "Security requirements" section stating what the tool guarantees and what it does not. Guarantees: integrity of what you download against a digest committed to git; fail-closed behaviour on any mismatch, missing checksum or missing hash tool; verification that does not depend on the network holding; Sigstore keyless signatures on every release asset with the certificate in the public Rekor log; and that nothing here touches a secret. Non-guarantees, stated just as plainly: nothing about the binary's behaviour, no protection against a compromised maintainer account, no availability guarantee, and nothing about the network the CLI talks to. https://github.com/basis-network/basis-cli/blob/main/SECURITY.md#security-requirements



    Das Projekt MUSS eine "Quickstart"-Anleitung für neue Benutzer/innen haben, um ihnen zu helfen, schnell mit der Software umgehen zu können. (URL erforderlich) [documentation_quick_start]
    Die Idee ist, den Benutzern/innen zu zeigen, wie man anfängt und was die Software überhaupt macht. Dies ist entscheidend für potenzielle Benutzer/innen, um loszulegen.

    The README's Install section is the quick start and it is the first thing after the description: clone, run ./download.sh, and you have a verified binary, with ./download.sh windows-x86_64 for the other platform. The by-hand equivalent with curl and sha256sum -c follows for readers who want to see what the script does before running it, and the section ends with the command that proves it worked. Three lines to something that runs. https://github.com/basis-network/basis-cli/blob/main/README.md#install



    Das Projekt MUSS sich bemühen, die Dokumentation mit der aktuellen Version der Projektergebnisse (einschließlich der vom Projekt produzierten Software) stehts zu aktualisieren. Jegliche bekannte Dokumentationsfehler, die es inkonsistent machen, MÜSSEN behoben werden. Wenn die Dokumentation in der Regel aktuell ist, aber fälschlicherweise einige ältere Informationen enthält, die nicht mehr wahr sind, behandeln Sie diese als Störung, dann verfolgen und beheben Sie diese wie üblich. [documentation_current]
    Die Dokumentation DARF Informationen über Unterschiede oder Änderungen zwischen Versionen der Software und/oder Links zu älteren Versionen der Dokumentation enthalten. Die Absicht dieses Kriteriums ist nicht, dass die Dokumentation perfekt sein muss, vielmehr soll Arbeit investiert, um die Dokumentation konsistent zu halten

    Documentation is treated as part of the change, not as a follow-up. The review checklist in CONTRIBUTING.md makes it explicit: a change that makes a sentence in the README wrong includes the fix for that sentence, and a reviewer is expected to check it. The rough edges in the README are written against the running devnet rather than assumed, and the roadmap says they move to the CHANGELOG as they are fixed upstream instead of quietly disappearing. Two known documentation defects were found and fixed in the course of this review rather than left: .gitignore described binaries as served from a storage bucket when they are attached to GitHub releases, and the Makefile said CI ran two targets when it now runs three. The CHANGELOG records what changed and what it means for each release.



    Die Projekt-Repository-Titelseite und / oder Website MUSS alle Errungenschaften, die erreicht wurden, einschließlich dieses Best Practices Abzeichens, innerhalb von 48 Stunden nach der öffentlichen Anerkennung ausweisen und verlinken. (URL erforderlich) [documentation_achievements]
    Eine Errungenschaft ist jegliche Form von externen Kriterien, auf die das Projekt speziell hingearbeitet hat, um diese zu erreichen, einschließlich einiger Abzeichen. Diese Informationen müssen nicht auf der ersten Seite der Website des Projekts einzusehen sein. Ein Projekt, das GitHub verwendet, kann Errungenschaften auf der Repository-Vorderseite setzen, indem man sie der README-Datei hinzufügt.

    The README opens with badges for lint, test, OpenSSF Best Practices, OpenSSF Scorecard, REUSE and the licence, and has an Achievements section that links each certification to its report — the Best Practices entry, the Scorecard viewer result and the REUSE information page — rather than to a marketing page, so a reader can check the claim instead of trusting the badge. That section also states what the achievements cover: this repository, the distribution and verification tooling, not the compiled binary. The passing badge was added the day it was earned. https://github.com/basis-network/basis-cli#achievements


  • Zugänglichkeit und Internationalisierung


    Das Projekt (beide Projektwebsite und Projektergebnisse) SOLLTE den bewährten Praktiken der Erreichbarkeit folgen, damit Personen mit Behinderungen noch an dem Projekt teilnehmen und die Projektergebnisse nutzen können, wo es vernünftig ist. [accessibility_best_practices]
    Für Webanwendungen siehe Web Content Accessibility Guidelines (WCAG 2.0) und dessen unterstützendes Dokument Understanding WCAG 2.0; Siehe auch W3C accessibility information. Für GUI-Anwendungen sollten Sie die umweltbezogenen Barrierefreiheitsrichtlinien verwenden (z.B. Gnome, KDE, XFCE, Android, iOS , Mac und Windows). Einige TUI-Anwendungen (z.B. `ncurses`-Programme) können bestimmte Dinge ausführen, um sich selbst zugänglicher zu machen (z.B. `alpine`'s `force-arrow-cursor`-Einstellung). Die meisten Kommandozeilen-Anwendungen sind ziemlich unzugänglich. Dieses Kriterium ist oft N/A, z.B. für Programmbibliotheken. Hier sind einige Beispiele, welche Maßnahmen zu ergreifen oder Fragen zu berücksichtigen sind:
    • Stellen Sie Text Alternativen für alle Nicht-Text-Inhalte zur Verfügung, so dass dieser in andere Formen umgewandelt werden kann, wie z.B. Großdruck, Blindenschrift, Sprache, Symbole oder einfachere Sprache ( WCAG 2.0-guideline 1.1)
    • Farbe ist nicht das einzige Mittel um Informationen zu übermitteln, die eine Aktion anzeigen, zu einer Eingabe auffordern oder visuelle Elemente unterscheiden. (WCAG 2.0 guideline 1.4.1)
    • Die visuelle Darstellung von Text und Textbildern hat einen Kontrast Verhältnis von mindestens 4,5:1, außer für großen Text, nebensächlichen Text, und Logos(WCAG 2.0 guideline 1.4.3)
    • Machen Sie alle Funktionalitäten von einer Tastatur aus erreichbar (WCAG guideline 2.1)
    • Ein GUI oder ein webbasiertes Projekt SOLLTE mit mindestens einen Screen-Reader auf der Zielplattform(en) testen (z.B. NVDA, Jaws oder WindowEyes auf Windows; VoiceOver auf Mac & iOS; Orca auf Linux/BSD; TalkBack auf Android). TUI-Programme DÜRFEN die Übermalung reduzieren, um eine redundante Lesung durch Screenreader zu verhindern.

    The project results are a command-line script and plain-text documentation, which the criterion notes are fairly accessible as-is, and the practices that do apply were followed rather than assumed. Output is plain text on stdout and stderr with no cursor addressing, no colour and no box drawing, so a screen reader gets it in order and nothing is conveyed by colour alone. Progress and results are short single lines rather than redrawn regions, so there is no overdraw for a screen reader to re-read. Errors state the problem in words on stderr and set a non-zero exit status, so the failure is available both to a person and to a program. The project sites are GitHub, whose accessibility we do not control but which is maintained to WCAG, and the documentation is Markdown with real headings, tables with header rows and descriptive link text rather than "click here".



    Die Projektsoftware SOLLTE internationalisiert werden, um eine einfachen Zugang für die Kultur, Region oder Sprache der Zielgruppe zu ermöglichen. Wenn die Internationalisierung (i18n) nicht andzuwenden ist (z. B. die Software keine für Endbenutzer beabsichtigte Texte erzeugt und keinen menschlich lesbaren Text sortiert), wählen Sie "nicht anwendbar" (N/A). [internationalization]
    Lokalisierung "bezieht sich auf die Anpassung eines Produkt-, Applikations- oder Dokumentinhalts, um die Sprache, kulturelle und andere Anforderungen eines bestimmten Zielmarktes zu erfüllen." Internationalisierung ist die "Gestaltung und Entwicklung eines Produkt-, Applikations- oder Dokumentinhaltes, die eine einfache Lokalisierung für Zielgruppen ermöglicht, die in Kultur, Region oder Sprache variieren." (Siehe W3Cs "Lokalisierung vs. Internationalisierung" .) Software erfüllt dieses Kriterium einfach dadurch, dass sie internationalisiert ist. Es ist keine Lokalisierung für eine andere Sprache erforderlich, denn sobald Software internationalisiert wurde, ist es möglich für andere, an der Lokalisierung zu arbeiten.

    The software produced by this project is a download-and-verify script whose entire output is a handful of operational status lines aimed at a developer at a terminal — the version and platform being fetched, the asset mapping, and the verification result. It generates no end-user-facing text, has no user interface, and sorts nothing human-readable: the only ordering it does is version sorting with sort -V, which is numeric and locale-independent by design. There is nothing here to localise, and internationalising status lines that exist to be read next to a stack trace would add a message catalogue and a dependency without helping anyone.


  • Andere


    Wenn die Projektseiten (Website, Repository und Download-URLs) Passwörter für die Authentifizierung von externen Benutzern speichern, müssen die Passwörter als iterierte Hashes mit einem per-User-Salt unter Verwendung eines Key-Stretching (iterierten) Algorithmus (z. B. Argon2id, Bcrypt, Scrypt, or PBKDF2). Wenn die Projektseiten hierfür keine Passwörter speichern, wählen Sie "nicht anwendbar" (N/A) aus. [sites_password_security]
    Beachten Sie, dass die Verwendung von GitHub dieses Kriterium erfüllt. Dieses Kriterium gilt nur für Passwörter, die für die Authentifizierung von externen Benutzern in die Projektseiten verwendet werden (inbound authentication). Wenn sich die Projektseiten auf anderen Seiten anmelden müssen (outbound authentication), müssen sie eventuell Authorization-Tokens für diesen Zweck anders speichern (da das Speichern eines Hashes nutzlos wäre). Dies gilt für das Kriterium crypto_password_storage zu den Projektseiten, ähnlich wie sites_https.

    The project sites do not store passwords for authenticating external users. The website, the repository and the download URLs are all GitHub, which handles its own authentication — the criterion's own details note that using GitHub meets it. This project operates no login of its own, has no user accounts, and stores no credential of any kind: there is no database, no session, and no server-side code in this repository at all.


 Verbesserungs-/Nacharbeits-Kontrolle 1/1

  • Vorherige Versionen


    Das Projekt MUSS die am häufigsten verwendeten älteren Versionen des Produkts beibehalten oder einen Upgrade-Pfad zu neueren Versionen bieten. Wenn der Upgrade-Pfad schwierig durchzuführen ist, muss das Projekt dokumentieren, wie das Upgrade durchgeführt werden kann (z. B. die Interfaces, die sich geändert haben, detaillierte Anleitung für die Aktualisierung des Upgrades). [maintenance_or_update]

    Only the latest release is supported, and there is a documented upgrade path that is a single command: re-running ./download.sh fetches and verifies the newest version this repository knows about, because the version is resolved from checksums/ by version sort rather than pinned. SECURITY.md states the support policy and why — this tracks a development network that may be reset without notice, so pinning an old client to a chain that no longer exists helps nobody — and the roadmap repeats it as a deliberate non-goal rather than an omission. The upgrade is not difficult: there is no state to migrate, no configuration file, and no installed footprint beyond the binary itself. The CHANGELOG records what changed between versions and what it means.


 Berichterstattung 3/3

  • Bug-Report-Prozess


    Das Projekt MUSS ein Issue-Tracking-System zur Verwaltung einzelner Issues verwenden. [report_tracker]
  • Anfälligkeits-Prozessbericht


    Das Projekt MUSS die Reporter/in von allen in den letzten 12 Monaten bekanntgegebenen Schwachstellenberichte aufführen, mit Ausnahme der Reporter, die Anonymität erbeten. Wurde in den letzten 12 Monaten keine Schwachstelle festgestellt, wählen Sie "nicht anwendbar" (N/A). (URL erforderlich) [vulnerability_report_credit]

    No vulnerabilities have been reported or resolved in this repository in the last 12 months — the repository has existed since August 2026 and has had no vulnerability reports at all, so there is nobody to credit yet. The policy for when there is one is already written rather than improvised at the time: SECURITY.md states that reporters are credited in the release notes unless they ask not to be, and the documented handling process ends with the advisory published, the CHANGELOG saying what changed and why, and the reporter credited. https://github.com/basis-network/basis-cli/blob/main/SECURITY.md#reporting-a-vulnerability



    Das Projekt MUSS den Prozess für die Meldung von Schwachstellen auf der Projektseite veröffentlichen. (URL erforderlich) [vulnerability_response_process]
    Dies steht im Zusammenhang mit vulnerability_report_process, welcher erfordert, dass es eine dokumentierte Möglichkeit gibt, Schwachstellen zu melden. Es bezieht sich auch auf vulnerability_report_response, welcher eine Antwort auf Schwachstellenberichte innerhalb eines bestimmten Zeitrahmens erfordert.

    SECURITY.md documents the process end to end in six steps: acknowledge the reporter and open a GitHub private security advisory (so an emailed report ends up in the same place, visible to the reporter); triage — reproduce, and decide whether it falls inside this repository's security boundary or belongs to basis-core or the network, forwarding it and saying where it went if it does not; record severity, scope and affected versions in the advisory; fix on a branch with a regression test where the defect is testable from here, reviewed before merge; release, with checksums committed before publication and assets verified and signed by the release workflow; disclose, with the advisory published, the CHANGELOG explaining the change and the reporter credited, timing agreed with them. A report that turns out not to be a vulnerability gets told why rather than left waiting. Committed timelines: acknowledgement within 3 working days, first assessment within 10, a fix or a stated plan within 90 days. https://github.com/basis-network/basis-cli/blob/main/SECURITY.md#how-a-report-is-handled


 Qualität 19/19

  • Programmierstil


    Das Projekt MUSS die spezifischen Codierungsstilrichtlinien für die primären Programmierprachen, die es verwendet, einhalten, und erfordern, dass die Beiträge die Bedingungen generell erfüllen. (URL erforderlich) [coding_standards]
    In den meisten Fällen erfolgt dies durch Verweis auf einige vorhandene Stilrichtlinien, möglicherweise Auflistung Unterschiede. Diese Stilrichtlinien können Möglichkeiten zur Verbesserung der Lesbarkeit und zur Verringerung der Wahrscheinlichkeit von Mängeln (einschließlich Schwachstellen) enthalten. Viele Programmiersprachen haben eine oder mehrere weit verbreitete Stilrichtlinien. Beispiele für Style Guides sind Google-Style-Guides und SEI CERT Coding Standards .

    The primary language is bash, and CONTRIBUTING.md names the Google Shell Style Guide as the standard contributions follow, with two deliberate differences stated rather than left to be discovered: comments explain why and not what, and indentation is two spaces to match the existing scripts. It also states the conventions for the other file types here — YAML workflows two-space indented with every action pinned to a commit SHA, Markdown wrapped at 80 columns — and requires that a silenced lint rule carries a # shellcheck disable= directive at the line it applies to with a reason, never file-wide. https://github.com/basis-network/basis-cli/blob/main/CONTRIBUTING.md#coding-style



    Das Projekt MUSS automatisch dafür sorgen, dass die ausgewählten Stilrichtlinien eingehalten werden, wenn mindestens ein FLOSS-Tool vorhanden ist, welches das in der gewählten Programmiersprache tun kann. [coding_standards_enforced]
    Dies kann mit Hilfe von statischen Analysewerkzeugen und/oder durch das Durchlaufen des Codes durch Code-Umformatierer erreicht werden. In vielen Fällen ist die Werkzeugkonfiguration im Projekt-Repository enthalten (da verschiedene Projekte unterschiedliche Konfigurationen wählen können). Projekte DÜRFEN Stil Ausnahmen erlauben (und werden es in der Regel); Wo Ausnahmen getroffen werden, MÜSSEN sie selten sein und MÜSSEN dokumentiert werden an der Stelle im Code, wo sie auftreten, so dass diese Ausnahmen überprüft werden können und so dass Werkzeuge sie automatisch in der Zukunft bearbeiten können. Beispiele für solche Werkzeuge sind ESLint (JavaScript), Rubocop (Ruby) und devtools check (R).

    shellcheck is the FLOSS tool for this language and it runs in CI on every push and every pull request, over download.sh, test/run.sh and test/coverage.sh. It is a required status check on the protected main branch, so a violation blocks the merge rather than producing a warning somebody may or may not read; the same command is available locally as make lint. Exceptions are allowed but must be per-line # shellcheck disable= directives with a reason at the point they apply, so they are reviewable and can be handled automatically later. There are currently none: the tree is clean with no suppressions at all.


  • Produktivsystem


    Build-Systeme für native Binärdateien MÜSSEN die relevanten Compiler- und Linker- (Umgebungs-) Variablen, die an sie übergeben werden (z.B. CC, CFLAGS, CXX, CXXFLAGS und LDFLAGS), respektieren und an Compiler- und Linker-Aufrufe weiterleiten. Ein Build-System DARF sie mit zusätzlichen Flags erweitern; Es DARF NICHT einfach die mitgelieferten Werte ersetzen. Wenn keine nativen Binärdateien erzeugt werden, wählen Sie "nicht anwendbar" (N/A). [build_standard_variables]
    Es sollte einfach sein, spezielle Build-Features wie Address Sanitizer (ASAN) zu aktivieren, oder verteilte und bewährte Best Practices einzuhalten (z.B. durch einfaches Einschalten von Compiler-Flags).

    No native binaries are generated by this project. There is no compiler and no linker involved anywhere in this repository: the software it produces is bash read by an interpreter as it is, and the Makefile has no build target — only check, coverage and lint. The compiled basis binary is built elsewhere, from basis-core, which is outside this entry's declared scope. There are therefore no CC, CFLAGS, CXX, CXXFLAGS or LDFLAGS for anything here to honour or override.



    Das Build- und Installationssystem SOLLTE Debugging-Informationen beibehalten, wenn sie in den entsprechenden Flags angefordert werden (z. B. "install -s" wird nicht verwendet). Wenn kein Build- oder Installationssystem vorhanden ist (z. B. typische JavaScript-Bibliotheken), wählen Sie "nicht anwendbar" (N / A). [build_preserve_debug]
    Z. B., die Festlegung von CFLAGS (C) oder CXXFLAGS (C ++) sollte die relevanten Debugging-Informationen erstellen, wenn diese Sprachen verwendet werden, und sie sollten während der Installation nicht ignoriert werden. Debugging-Informationen werden für Unterstützung und Analyse benötigt und sind auch nützlich, um das Vorhandensein von Härtungsmerkmalen in den kompilierten Binärdateien zu messen.

    There is no build or installation system that could strip anything. Nothing is compiled, so no debugging information is generated in the first place, and download.sh copies bytes and verifies a digest rather than installing with install -s or anything like it. The script it produces is its own source and is fully readable at run time.



    Das Build-System für die Software, die durch das Projekt erzeugt wird, DARF NICHT rekursive Unterverzeichnisse aufbauen, wenn es Querverweise in den Unterverzeichnissen gibt. Wenn kein Build- oder Installationssystem vorhanden ist (z.B. typische JavaScript-Bibliotheken), wählen Sie "nicht anwendbar" (N / A). [build_non_recursive]
    Die interne Abhängigkeitsinformationen des Build-Systems des Projektes müssen präzise sein, andernfalls können Änderungen an dem Projekt nicht korrekt erfolgen. Falsche Builds können zu Defekten (einschließlich Schwachstellen) führen. Ein häufiger Fehler bei großen Build-Systemen ist die Verwendung eines "rekursiven Builds" oder "rekursiven Make", d.h. einer Hierarchie von Unterverzeichnissen, die Quelldateien enthalten, wobei jedes Unterverzeichnis unabhängig aufgebaut ist. Es sei denn, jedes Unterverzeichnis ist völlig unabhängig, was ist ein Fehler ist, da die Abhängigkeitsinformationen nicht korrekt sind.

    There is no build system to be recursive. The Makefile is flat, has no build target, no subdirectory makefiles and no cross-directory dependencies: each target is a single command that runs a script in place. Nothing is compiled, so there is no dependency graph that could be got wrong.



    Das Projekt MUSS in der Lage sein, den Prozess der Generierung von Informationen aus Quelldateien zu wiederholen und genau das gleiche Bit-für-Bit-Ergebnis zu erhalten. Wenn kein Build auftritt (z. B. Skriptsprachen, in denen der Quellcode direkt verwendet wird, anstatt kompiliert zu werden), wählen Sie "nicht anwendbar" (N / A). [build_repeatable]
    GCC- und Clang-Benutzer finden die Option -frandom-seed womöglich nützlich; In manchen Fällen kann dies dadurch gelöst werden, dass man eine Sortierreihenfolge erzwingt. Weitere Vorschläge finden Sie auf der reproducible Build Seite.

    No building occurs. This is a scripting-language project: download.sh and test/run.sh are used directly by the interpreter, not compiled into anything, so there is no generated artefact whose bit-for-bit reproduction could be compared. Reproducibility of the compiled binary is a property of basis-core, outside this entry's scope, and is listed as a known gap in the assurance case rather than claimed here.


  • Installationssystem


    Das Projekt MUSS eine Möglichkeit zur einfachen Installation und Deinstallation der Software haben, unter Benutzung einer häufig verwendeten Methode. [installation_common]
    Beispiele hierfür sind die Verwendung eines Paketmanagers (auf dem System- oder Sprachniveaus), "make install/uninstall" (unterstützt DESTDIR), einem Container im Standardformat oder ein virtuelles Maschinenbild im Standardformat. Der Installations- und Deinstallationsvorgang (z.B. seine Verpackung) DARF von einem/einer Dritten implementiert werden, solange es FLOSS ist.

    Installation is ./download.sh, which is the commonly-used convention for this kind of tool — a single verified-download script, the same pattern as rustup or the many curl | sh installers, except that this one refuses to proceed if it cannot verify what it fetched. The README documents it as the first thing after the description, along with the by-hand curl plus sha256sum -c equivalent for readers who want to do it themselves. Uninstallation is equally simple and is a real answer rather than a dodge: everything the script produces lives under bin/<platform>/ inside the clone, nothing is written outside it, no system directory is touched, no service is registered and no configuration file is created anywhere. Deleting the directory removes the tool completely.



    Das Installationssystem für den/die Endbenutzer/in MUSS Standardkonventionen zur Auswahl des Zielortes, in dem gebildete Artefakte zur Installationszeit geschrieben werden, folgen. Zum Beispiel, wenn es Dateien auf einem POSIX-System installiert, muss es die DESTDIR-Umgebungsvariable verwenden. Wenn es kein Installationssystem oder keine Standardkonvention gibt, wählen Sie "nicht anwendbar" (N/A). [installation_standard_variables]

    There is no installation system that writes outside its own directory, so there is no standard convention to honour. download.sh writes only to bin/<platform>/ relative to the script's own location; it installs nothing into a system prefix, so DESTDIR and PREFIX have nothing to select. Where the binary goes afterwards is the user's choice, made with mv or by adding that directory to PATH.



    Das Projekt MUSS einen Weg für potenzielle Entwickler bereithalten, um schnell alle erforderlich Projektergebnisse und Support-Umgebungen zu installieren, um Änderungen vornehmen zu können, einschließlich der Tests und Test-Umgebung. Dies MUSS mit einer gängigen Methode durchgeführt werden können. [installation_development_quick]
    Dies DARF mit einem generierten Container- und/oder Installationsskript(en) implementiert werden. Externe Abhängigkeiten würden typischerweise durch das Aufrufen von System- und/oder Sprachpaketmanager(n), als external_dependencies, installiert.

    Clone the repository and run make check. That is the whole development environment: the suite needs nothing that download.sh itself does not need — bash, curl and a SHA-256 tool, all present on a stock Linux or macOS — and it touches no network, because each case fabricates a throwaway release in a temporary directory and reaches it over file://. There is nothing to install, no language runtime to provision, no container to build and no fixture to download. make lint adds shellcheck and reuse, and make coverage adds bashcov (gem install bashcov); both are documented in CONTRIBUTING.md and neither is needed to make and test a change.


  • Externe gepflegte Komponenten


    Das Projekt MUSS externe Abhängigkeiten in computerlesbarer Form auflisten. (URL erforderlich) [external_dependencies]
    Dies geschieht in der Regel mit den Konventionen des Paketmanagers und / oder des Buildsystems. Dies hilft auch installation_development_quick zu erfüllen.

    This repository ships no code dependencies — no package manifest, no vendored code, nothing from a language registry — and the two classes of external dependency it does have are both listed in a computer-processable way. The GitHub Actions the workflows call are declared in the workflow YAML with every action pinned to a commit SHA and the version in a trailing comment, which is the convention for that ecosystem and is what Dependabot reads; .github/dependabot.yml declares the github-actions ecosystem so those declarations are watched weekly. The run-time dependencies are the operating system's own bash, curl and sha256sum or shasum, which is why there is no manifest to add them to; the README and CONTRIBUTING.md both state them, and the script itself checks for the SHA-256 tool at run time and exits if it is missing. https://github.com/basis-network/basis-cli/blob/main/.github/dependabot.yml



    Projekte MÜSSEN ihre externen Abhängigkeiten (einschließlich Bequemlichkeitskopien) überwachen oder regelmäßig überprüfen, um bekannte Schwachstellen zu erkennen und ausnutzbare Schwachstellen zu beheben oder sie als unausweichlich zu verifizieren. [dependency_monitoring]
    Dies kann mit einem Ursprungsanalysator / Abhängigkeitsüberprüfungswerkzeug / Softwarezusammensetzungsanalysator wie OWASPs Dependency-Check, Sonatypes Nexus Auditor, Synopsys' Black Duck Software Composition Analysis, und Bundler-Audit (für Ruby) erreicht werden. Einige Paketmanager beinhalten Mechanismen, um dies zu tun. Es ist akzeptabel, wenn die Anfälligkeit der Komponenten nicht ausgenutzt werden kann, aber diese Analyse ist schwierig und es ist manchmal einfacher, den Part einfach zu aktualisieren oder zu reparieren.

    Dependabot runs weekly over the github-actions ecosystem and opens a pull request when a pinned action moves, which is the whole point of the configuration: pinning to a commit SHA makes an action safe but not current, and without something watching, a pin quietly rots. Six such updates have already been merged. Those pull requests run the same required CI as any other change, so an update cannot land broken. GitHub's own vulnerability alerting is enabled on the repository, CodeQL analyses the workflows on every push and weekly, and OpenSSF Scorecard publishes a Vulnerabilities check result publicly on every push. There are no other external components: no language-registry dependencies and no convenience copies of anything.



    Das Projekt MUSS entweder:
    1. Es einfach machen, wiederverwendbare extern gepflegte Komponenten zu identifizieren und zu aktualisieren;oder
    2. Die Standardkomponenten des Systems oder der Programmiersprache verwenden.
    Dann, wenn eine Schwachstelle in einer wiederverwendeten Komponente gefunden wird, wird es einfach sein diese Komponente zu aktualisieren. [updateable_reused_components]
    Ein typischer Weg, um dieses Kriterium zu erfüllen, ist die Verwendung von System- und Programmiersprachen-Paketverwaltungssystemen. Viele FLOSS-Programme werden mit "Convenience-Bibliotheken" ausgestattet, die lokale Kopien der Standardbibliotheken (ggf. geforkt) enthalten. Prinzipiell ist das gut. Wenn jedoch das Programm diese lokalen (geforkten) Kopien verwenden *muss*, dann wird die Aktualisierung der "Standard"-Bibliotheken, als Sicherheitsupdate, diese zusätzlichen Kopien immer noch verwundbar lassen. Dies ist vor allem ein Problem für Cloud-basierte Systeme; Wenn der Cloud-Provider seine "Standard"-Bibliotheken aktualisiert, aber das Programm sie nicht verwendt, dann helfen die Updates nicht wirklich. Siehe z.B. "Chromium: Why it isn't in Fedora yet as a proper package" von Tom Callaway .

    Everything reused is the standard component provided by the system. The script uses the operating system's bash, curl and sha256sum or shasum, all updated by the system package manager, and there are no convenience copies, no vendored libraries and no forked standard components anywhere in the tree — so a security update to any of them takes effect immediately, with nothing here holding an old copy alive. The only other reused components are the GitHub Actions, which are pinned by commit SHA and therefore trivially identifiable, and Dependabot updates them weekly.



    Das Projekt SOLLTE vermeiden veraltete oder obsolete Funktionen und APIs zu verwenden, für die FLOSS-Alternativen in der eingesetzten Technologie verfügbar sind (ihr "Technologie-Stack") und eine Supermajorität der Benutzer, die das Projekt unterstützt (so dass die Benutzer den Zugriff auf die Alternative haben ). [interfaces_current]

    Nothing deprecated or obsolete is used. The script's entire external surface is POSIX-standard utilities and current curl options, with no shell builtin or flag that has been deprecated; shellcheck runs in CI specifically to catch constructs that are obsolete or fragile, and the tree is clean with no suppressions. The CI side is kept current by Dependabot: all GitHub Actions are on their current major versions, and when a whole family had to move together — every codeql-action reference from v3 to v4 — it was done in a single change rather than left half-migrated.


  • Automatisierte Test-Suite


    Eine automatisierte Test-Suite MUSS bei jedem Check-In auf ein gemeinsames Repository für mindestens einen Zweig angewendet werden. Diese Test-Suite muss einen Bericht über Erfolg oder Misserfolg des Testes produzieren. [automated_integration_testing]
    Diese Anforderung kann als Teilmenge von test_continuous_integration angesehen werden, konzentriert sich aber nur auf das Testen, ohne eine kontinuierliche Integration zu fordern.

    .github/workflows/test.yml runs the full suite on every push to main and every pull request targeting it, via make check. It reports success or failure as a GitHub status check — download.sh test suite — which is required on the protected branch, so a failing suite blocks the merge rather than being noticed later. The suite is nine cases and 28 assertions covering the whole download-and-verify path end to end, including the two failure paths that justify the repository. A second job in the same workflow measures statement coverage and fails below 90%.



    Das Projekt MUSS Regressionstests zu einer automatisierten Test-Suite hinzufügen für mindestens 50% der, in den letzten sechs Monaten, gefixten Bugs. [regression_tests_added50]

    No bugs have been fixed in this repository in the last six months, so there is no denominator: the repository was made public in August 2026, has had no bug reports against download.sh and no defect fixes to add regression tests for. The policy for when there is one is already in place rather than to be decided later — CONTRIBUTING.md requires that a change to what download.sh does comes with a test, the review checklist makes a behaviour change without a test a blocking comment, and SECURITY.md's handling process specifies a regression test as part of fixing a reported vulnerability. Two of the nine existing cases are failure paths written for exactly this purpose.



    Das Projekt MUSS automatisierte FLOSS-Test-Suite(s) haben, die mindestens 80% Aussage Berichterstattung haben, wenn es mindestens ein FLOSS-Tool gibt, das dieses Kriterium in der ausgewählten Sprache erfüllen kann. [test_statement_coverage80]
    Viele FLOSS-Tools stehen zur Verfügung, um die Test-Coverage zu beurteilen, einschließlich gcov/lcov, Blanket.js, Istanbul, JCov, und covr (R). Beachten Sie, dass das Erfüllen dieses Kriteriums keine Garantie dafür ist, dass die Test-Suite gründlich ist, hingegen ist das Verfehlen dieses Kriteriums ein starker Indikator für eine schlechte Test-Suite.

    Measured, not estimated: 98.1% statement coverage of download.sh, 52 of 53 statements. make coverage runs the suite under bashcov, the FLOSS coverage tool for bash, and CI runs it as its own job on every push and every pull request, failing the job below a hard floor of 90% — so a regression shows up as a red check on the pull request that caused it. Getting an honest figure needed two things that are documented in test/coverage.sh: the suite deletes each sandbox when its case ends, taking the traced copy of the script with it, so BASIS_TEST_KEEP keeps them; and SimpleCov silently drops any path with a dot-prefixed component, which yields a confident 0% with no error. Each case traces its own copy of the same bytes, so the copies are summed per line. One line is reported uncovered and is not — the done carrying the loop's redirection, which bash attributes to the while — and it is left in the report rather than special-cased, because a coverage tool taught to lie about one line stops being evidence about the others.


  • Neue Funktionalitätsüberprüfung


    Das Projekt MUSS eine formale schriftliche Richtlinie dazu haben, wie wichtige neue Funktionalität hinzugefügt werden. Tests für die neue Funktionalität MÜSSEN zu einer automatisierten Test-Suite hinzugefügt werden. [test_policy_mandated]

    CONTRIBUTING.md states it as a rule, not a suggestion: "A change to what download.sh does comes with a test." It goes on to say why, which is what makes it stick — the script exists to refuse a download that does not match the committed checksum, and a refusal that stops working is silent. The same document requires make check to pass and asks contributors to say in the pull request which case covers their change, and the review checklist makes a behaviour change with no covering test a blocking comment. SECURITY.md applies the same rule to vulnerability fixes.



    Das Projekt MUSS in seinen dokumentierten Anweisungen für Änderungsvorschläge die Richtlinien enthalten, die Tests für große neue Funktionalität hinzugefügt werden sollen. [tests_documented_added]
    Allerdings ist auch eine informelle Regel akzeptabel, solange die Tests in der Praxis hinzugefügt werden.

    It is written down in CONTRIBUTING.md, in the section a contributor reads before opening a pull request, and repeated as a checklist item in the pull request template. https://github.com/basis-network/basis-cli/blob/main/CONTRIBUTING.md#tests


  • Warnhinweise


    Projekte MÜSSEN praktischerweise sehr streng mit Warnungen in der Projektsoftware sein. [warnings_strict]
    Bei manchen Projekten können einige Warnungen effektiv nicht aktiviert werden. Was benötigt wird, ist ein Beleg dafür, dass das Projekt danach strebt, Warnungen zu aktivieren, wo es möglich ist, so dass Fehler frühzeitig erkannt werden.

    shellcheck runs at its default severity, which is the lowest one and therefore reports everything from style upwards, over every script in the repository, with no exclusions and no suppressions. Its optional --enable=all checks were reviewed and not adopted: they are formatting preferences (brace every variable reference, prefer [[ ]] to [ ]) rather than defect detection, and adopting them would mean rewriting working code to a house style it does not use.


 Sicherheit 13/13

  • Wissen über sichere Entwicklungspraktiken


    Das Projekt MUSS sichere Designprinzipien (von "know_secure_design"), soweit anwendbar, umsetzen. Wenn das Projekt keine Software produziert, wählen Sie "nicht anwendbar" (N/A). [implement_secure_design]
    Beispielsweise sollten die Projektergebnisse fehlersichere Vorgaben haben (Zugriffsentscheidungen sollten standardmäßig verweigert werden und die Installation von Projekten sollte standardmäßig sicher sein). Die Projektergebnisse sollten auch eine vollständige Vermittlung haben (jeder Zugang, der begrenzt werden kann, muss auf Autorität überprüft werden und nicht umgangen werden können). Beachten Sie, dass in einigen Fällen Prinzipien in Konflikt geraten, in welchen eine Entscheidung getroffen werden muss (z.B. viele Mechanismen können die Dinge komplexer machen, gegen die "Wirtschaftlichkeit des Mechanismus" verstoßen / halten Sie es einfach).

    docs/ASSURANCE-CASE.md works through Saltzer and Schroeder principle by principle with the concrete application in each row. The ones that carry the design: fail-safe defaults — every path denies by default, and no checksum file, no hash tool or a digest mismatch each end in a non-zero exit with the binary never made executable; separation of privilege — subverting a download requires control of both the release and the git history, two mechanisms with different failure modes and different audiences; economy of mechanism — about 110 lines of bash, no dependency manifest, no configuration file and no persistent state, so the whole verification argument fits on a page; complete mediation — every name in the checksum file is verified, not just the first, which the multi-entry test case guards; least privilege — workflows are read-all by default and elevated per job only where genuinely needed. Where principles conflict the choice is stated rather than hidden.


  • Verwende grundlegend gute kryptographische Praktiken

    Beachten Sie, dass einige Software keine kryptographischen Mechanismen verwenden muss. Wenn Ihr Project Software erstellt das (1) kryptographische funktionen einbindet, aktiviert, oder ermöglicht und (2) aus den USA heraus an nicht US-Bürger verteilt wird, dann könnten sie rechtlich zu weiterne Schritten gezwungen sein. Meistens beinhaltet dies lediglich das Senden einer E-Mail. Für mehr Informationen, siehe den Abschnitt zu Encryption in Understanding Open Source Technology & US Export Controls.

    Die Standard-Sicherheitsmechanismen innerhalb der Projektsoftware DÜRFEN NICHT von kryptographischen Algorithmen oder Modi mit bekannten schweren Mängeln abhängen (z.B. der SHA-1-Kryptographie-Hash-Algorithmus oder der CBC-Modus in SSH). [crypto_weaknesses]
    Sorgen über den CBC-Modus in SSH werden in CERT: SSH CBC vulnerability erläutert.

    No SHA-1 and no CBC-mode SSH: the only hash is SHA-256 and the only transport is TLS as curl negotiates it. (git names its own objects with SHA-1, which is a property of the version control system rather than of anything this project produces or verifies with — the integrity guarantee this repository makes rests on the SHA-256 in checksums/, not on a commit id.)



    Das Projekt SOLLTE mehrere kryptographische Algorithmen unterstützen, so dass Benutzer schnell wechseln können, wenn eines defekt ist. Verbreitete symmetrische Schlüsselalgorithmen umfassen AES, Twofish und Serpent. Verbreitete kryptographische Hash-Algorithmus-Alternativen umfassen SHA-2 (einschließlich SHA-224, SHA-256, SHA-384 UND SHA-512) und SHA-3. [crypto_algorithm_agility]

    The verification format is the standard sha256sum/shasum -c file, which is not tied to a single implementation and already runs through two interchangeable back ends selected at run time: sha256sum where it exists and shasum -a 256 where it does not, which is what macOS ships. The digest algorithm lives in the checksum files under checksums/<tag>/<platform>.sha256 rather than being compiled into logic, so moving to another algorithm is a new file set and a matching shasum -a selection, not a redesign. SHA-256 is a current SHA-2 algorithm with no known weakness relevant here, and there is no cipher suite or key exchange in this project to negotiate: the signatures on release assets are Sigstore's, whose algorithm agility is that project's.



    Das Projekt MUSS die Speicherung von Anmeldeinformationen (z.B. Passwörter und dynamische Token) und private kryptografische Schlüssel in Dateien, die von anderen Informationen getrennt sind (z.B. Konfigurationsdateien, Datenbanken und Protokolle), unterstützen und den Benutzern erlauben, sie ohne Code-Neukompilierung zu aktualisieren und zu ersetzen . Wenn das Projekt keine Anmeldeinformationen und private kryptographische Schlüssel verarbeitet, wählen Sie "nicht anwendbar" (N/A). [crypto_credential_agility]

    This project never processes authentication credentials or private cryptographic keys. download.sh authenticates to nothing, sends no credential, reads no keystore, prompts for no passphrase, and stores nothing — it fetches a public release asset over HTTPS and hashes it. Release signing is Sigstore keyless: the identity is the release workflow's short-lived OIDC token and there is no private key in the repository, in CI, or anywhere for a person to hold. SECURITY.md states plainly that nothing here, download.sh included, touches key material of any kind.



    Die vom Projekt produzierte Software SOLLTE sichere Protokolle für alle Netzwerkkommunikationen unterstützen , wie SSHv2 oder höher, TLS1.2 oder höher (HTTPS), IPsec, SFTP und SNMPv3. Unsichere Protokolle wie FTP, HTTP, Telnet, SSLv3 oder früher, und SSHv1 SOLLTEN standardmäßig deaktiviert werden und nur aktiviert werden, wenn der/die Benutzer/in es speziell konfiguriert. Wenn die vom Projekt produzierte Software keine Netzwerkkommunikation verwendet, wählen Sie "nicht anwendbar" (N/A). [crypto_used_network]

    All network communication is HTTPS. download.sh fetches from https://github.com/<repo>/releases/download by default, and curl verifies the certificate chain by default with no flag anywhere in this project disabling it — there is no --insecure, no -k and no GIT_SSL_NO_VERIFY-style escape hatch. The base URL can be overridden by BASIS_CLI_BASE_URL, which exists so the test suite can point at a local directory over file:// without touching the network; that is an explicit action by the user, which is exactly the condition the criterion allows. Nothing insecure is enabled by default and no plaintext protocol is used at all.



    Wenn die Software, die durch das Projekt produziert wird, TLS unterstützt oder verwendet, SOLLTE sie mindestens TLS Version 1.2 verwenden. Beachten Sie, dass der Vorgänger von TLS SSL genannt wurde. Wenn die Software TLS nicht verwendet, wählen Sie "nicht anwendbar" (N/A). [crypto_tls12]

    TLS is used through the system's curl and its TLS library, so the project supports whatever they do, which on any currently supported platform is TLS 1.2 and 1.3. The script pins no version, disables nothing and offers no option to downgrade, so a system hardened to 1.2-or-better stays that way. GitHub, the only host contacted by default, requires TLS 1.2 as a minimum on its side.



    Die Software, die vom Projekt produziert wird, muss, wenn es TLS unterstützt, die TLS-Zertifikatsüberprüfung standardmäßig bei der Verwendung von TLS, einschließlich auf Subresources, durchführen. Wenn die Software TLS nicht verwendet, wählen Sie "nicht anwendbar" (N/A). [crypto_certificate_verification]
    Beachten Sie, dass eine falsche TLS-Zertifikatsüberprüfung ein häufiger Fehler ist. Weitere Informationen finden Sie unter "The Most Dangerous Code in the World: Validating SSL Certificates in Non-Browser Software" von Martin Georgiev et al. und "Do you trust this application?" von Michael Catanzaro.

    Certificate verification is on, by default, and cannot be turned off from here. download.sh invokes curl -fSL --retry 3 --retry-delay 2, and curl verifies the certificate chain and hostname by default; this project passes no --insecure, no -k, no --cacert override and sets no environment variable that would weaken it. There are no subresources: one request per asset named in the checksum file, all to the same host. A failed verification makes curl exit non-zero, and with set -euo pipefail the script stops there. Worth noting that the integrity guarantee does not rest on this anyway: even a fully broken TLS connection cannot produce a binary matching a digest committed to git.



    Die Software, die vom Projekt produziert wird, MUSS, wenn sie TLS unterstützt, eine Zertifikatsüberprüfung durchführen, bevor HTTP-Header mit privaten Informationen (wie z.B. sichere Cookies) versendet werden. Wenn die Software TLS nicht verwendet, wählen Sie "nicht anwendbar" (N/A). [crypto_verification_private]

    The software sends no private information over TLS at all — no HTTP headers carrying credentials, no cookies, no tokens, no authentication of any kind. download.sh issues unauthenticated GET requests for public release assets; there is nothing private that could be sent before or after verification. The CLI's inability to send an Authorization header is documented in the README as one of its known limitations. Certificate verification is nonetheless on by default for every request, as answered in crypto_certificate_verification.


  • Sicheres Release


    Das Projekt MUSS kryptographisch unterschriebene Releases der Projektergebnisse aufzeichnen, die für weit verbreitete Verwendung gedacht sind, und es MUSS ein dokumentierter Prozess sein, der den Benutzern/innen erklärt, wie sie die öffentlichen Signaturschlüssel erhalten und die Signatur(en) überprüfen können. Der private Schlüssel für diese Signatur(en) MUSS NICHT auf der Seite(n) verwendet werden, die öffentlich zugänglich sind. Wenn Releases nicht für eine weit verbreitete Verwendung bestimmt sind, wählen Sie "nicht anwendbar" (N/A). [signed_releases]
    Die Projektergebnisse umfassen sowohl Quellcode als auch alle erzeugten Ergebnisse, falls zutreffend (z. B. ausführbare Dateien, Pakete und Container). Generierte Ergebnisse können separat vom Quellcode signiert werden. Diese DÜRFEN als signierte git-Tags (mit kryptographischen digitalen Signaturen) implementiert werden. Projekte DÜRFEN generierte Ergebnisse getrennt von Werkzeugen wie git behandeln, aber in diesen Fällen MÜSSEN die separaten Ergebnisse separat unterzeichnet werden.

    Every release asset is cryptographically signed with Sigstore cosign in keyless mode by .github/workflows/release.yml, which fires on release: published — deliberately not on a tag push — so what is signed is exactly what people download rather than a rebuild that resembles it. Before signing, the workflow verifies every published asset against the checksums committed to git, so a mismatch fails loudly instead of being signed. The private key requirement is met in the strongest available form: there is no private key at all. The signing identity is the workflow's short-lived OIDC token and the certificate is recorded in the public Rekor transparency log, so nothing persistent exists on the distribution site or anywhere else to be stolen. SECURITY.md documents verification with a complete cosign verify-blob command including the certificate identity and OIDC issuer to pin against, and the README links to it. Independently of the signatures, every release also has its SHA-256 committed to this repository before publication. https://github.com/basis-network/basis-cli/blob/main/SECURITY.md#signatures



    Es wird empfohlen, dass in dem Versionskontrollsystem jeder wichtige Versions-Tag (ein Tag, der Teil eines Hauptrelease, eines kleineren Release, oder eines Fixes, öffentlich gemeldeten Schwachstellen, ist) kryptographisch signiert und verifizierbar ist, wie in Signed_releases. [version_tags_signed]

    The release assets are signed; the git tags they come from are not. This is answered honestly rather than stretched: signing tags needs a personal signing key held by a maintainer, and the project has deliberately avoided having one anywhere — asset signing is keyless precisely so that no individual holds a key that can be stolen or coerced. Adding tag signing is a real improvement and is on the roadmap as item 2, because it would close the gap between "this binary was published by our workflow" and "this tag is the one the maintainers made". Until it is done, the answer is Unmet.


  • Andere Sicherheitsissues


    Die Projektergebnisse MÜSSEN alle Eingaben aus potenziell nicht vertrauenswürdigen Quellen überprüfen, um sicherzustellen, dass sie gültig sind (eine *Allowliste*) und ungültige Eingaben ablehnen, wenn überhaupt Einschränkungen für die Daten vorliegen. [input_validation]
    Beachten Sie, dass der Vergleich der Eingabe mit einer Liste von "schlechten Formaten" (aka einer *Denylist*) normalerweise nicht ausreicht, weil Angreifer oft um eine Denyliste herumarbeiten können. Insbesondere werden Zahlen in interne Formate konvertiert und dann überprüft, ob sie zwischen ihrem Minimum und Maximum (inklusive) liegen und Textstrings werden überprüft, um sicherzustellen, dass sie gültige Textmuster haben (z.B. gültige UTF-8, Länge, Syntax, etc.). Einige Daten müssen möglicherweise "irgendetwas" (z. B. ein Datei-Uploader) sein, aber das ist typischerweise selten der Fall.

    Every input from a potentially untrusted source is checked against an allowlist before it is used, and rejected if it does not match. The platform argument is not interpolated into a URL on trust: it must correspond to an existing checksums/<version>/<platform>.sha256 file, and anything else exits 1 listing the versions and platforms that do exist — a test case covers exactly that. The version is resolved from the directories that exist in checksums/, so it cannot name something arbitrary. The checksum file is the input that matters most, and CI validates its format with an allowlist on both fields: each digest must be exactly 64 lowercase hex characters, and each file name must be basis or basis.exe — nothing else parses, which is also what stops a ../ name reaching the download loop. The downloaded bytes themselves are the untrusted input the whole project exists to check, and they are verified against the committed digest before anything is made executable. Every shell expansion is quoted, enforced by shellcheck in CI.



    Härtungsmechanismen SOLLTEN in der Software, die das Project entwickelt, verwendet werden, so dass Softwarefehler weniger wahrscheinlich zu Sicherheitslücken führen. [hardening]
    Härtungsmechanismen können HTTP-Header enthalten wie Content Security Policy (CSP), oder Compiler-Flags (z.B. -fstack-protector), um Angriffe zu mildern, oder Compiler-Flags, um undefiniertes Verhalten zu eliminieren. Für unsere Zwecke wird das Prinzip des kleinsten Privilegs nicht als Verhärtungsmechanismus betrachtet (trotzdem ist es wichtig, aber an anderer Stelle).

    The hardening available to a shell script is applied. set -euo pipefail is the first executable line: an unset variable, a failing command or a failing pipeline stage aborts rather than continuing with a wrong value — the failure mode that turns a shell defect into a security problem. Every expansion is quoted and shellcheck enforces it in CI as a required check. The script asks for no privilege and writes only under its own bin/ directory, touching no system location. On the CI side, which is the part of this project with credentials: permissions: read-all at workflow level with elevation per job only where genuinely needed, persist-credentials: false on every checkout, and every action pinned to a commit SHA rather than a mutable tag. The project sites are GitHub, which serves Content-Security-Policy, HSTS, X-Content-Type-Options and X-Frame-Options.



    Das Projekt MUSS einen "Assurance Case" bereithalten, der rechtfertigt, wie die Sicherheitsanforderungen erfüllt werden. Der Assurance Case muss Folgendes beinhalten: eine Beschreibung des Bedrohungsmodells, eine eindeutige Identifizierung von Vertrauensgrenzen, eine Beschreibung wie sichere Designprinzipien angewendet wurden, und eine Beschreibung wie die üblichen Implementierungssicherheitsschwächen beseitige wurden. (URL erforderlich) [assurance_case]
    Ein "Assurance Case" ist ein dokumentierter Beweis, der ein überzeugendes und gültiges Argument enthällt, dass ein bestimmter Satz kritischer Ansprüche bezüglich der Eigenschaften eines Systems für eine gegebene Anwendung in einer gegebenen Umgebung hinreichend erfüllt ist ("Software Assurance Using Structured Assurance Case Models", Thomas Rhodes et al., NIST Interagency Report 7608 ). Vertrauensgrenzen sind Grenzen, in denen Daten oder Ausführung ihr Vertrauensniveau ändern, z.B. die Grenzen eines Servers in einer typischen Webanwendung. Es ist üblich, sichere Designprinzipien (wie Saltzer und Schroeer) und gemeinsame Implementierungssicherheitsschwächen (wie die OWASP Top 10 oder CWE/SANS Top 25) aufzurufen und zu zeigen, wie diesen entgegengewirkt wird. Die BadgeApp Assurance Case kann ein nützliches Beispiel sein. Dies bezieht sich auf documentation_security, documentation_architecture und implement_secure_design.

    docs/ASSURANCE-CASE.md contains all four required parts. Threat model: six adversaries described by capability rather than identity — network attacker, release attacker, repository attacker, compromised CI, hostile user environment, and the tooling supply chain — each with the mechanism that counters it, the test case or workflow that evidences it, and the residual risk that remains. Trust boundaries: four regions, with the one security-relevant crossing identified as untrusted bytes entering a machine checked against a digest that came the other way. Secure design: Saltzer and Schroeder row by row with the concrete application of each. Implementation weaknesses: CWE-494, 347, 829, 78, 22 and 367 answered individually, with the inapplicable half of the OWASP list named as inapplicable rather than silently skipped. It also states the claim it does not make — nothing about the compiled binary's behaviour — and ends with the known gaps, including that single-maintainer review is the dominant residual risk. https://github.com/basis-network/basis-cli/blob/main/docs/ASSURANCE-CASE.md


 Analyse 2/2

  • Statische Codeanalyse


    Das Projekt MUSS mindestens ein statisches Analyse-Tool mit Regeln oder Ansätzen verwenden, um nach bekannten Schwachstellen in der analysierten Sprache oder Umgebung zu suchen, wenn es mindestens ein FLOSS-Tool gibt, das dieses Kriterium in der ausgewählten Sprache implementieren kann. [static_analysis_common_vulnerabilities]
    Statische Analysetools, die speziell dafür entwickelt wurden, nach Schwachstellen zu suchen, finden diese eher. Das heißt, dass die Verwendung von statischen Tools in der Regel helfen wird einige Probleme zu finden. Wir schlagen dies vor, aber erwarten es für das "passing" -Level-Badge nicht.

    CodeQL's Actions query pack is written for exactly the vulnerabilities of this environment — expression injection, excessive GITHUB_TOKEN permissions, artifact poisoning, unpinned actions. OpenSSF Scorecard also runs against the repository weekly and on every push to main. https://scorecard.dev/viewer/?uri=github.com/basis-network/basis-cli


  • Dynamische Codeanalyse


    Wenn die Projektsoftware Software mit einer speicherunsicheren Sprache (z.B. C oder C ++) enthält, MUSS mindestens ein dynamisches Werkzeug (z.B. ein Fuzzer oder ein Web-Applikationsscanner) routinemäßig in Kombination mit einem Mechanismus verwendet werden, welche Speichersicherheitsproblemen wie Puffer-Cach Überschreibe erkennen. Wenn das Projekt keine Software verwendet, die in einer speicherunsicheren Sprache geschrieben ist, wählen Sie "nicht anwendbar" (N/A). [dynamic_analysis_unsafe]
    Beispiele für Mechanismen zur Erkennung von Arbeitsspeicher Sicherheitsproblemen sind Adresse Sanitizer (ASAN) (verfügbar in GCC und LLVM), Memory Sanitizer und valgrind. Andere möglicherweise verwendete Werkzeuge sind Thread Sanitizer und Undefined Behavior Sanitizer. Weit verbreitete Assertions würden auch funktionieren.

    Nothing in this repository is written in a memory-unsafe language. It is shell, YAML and Markdown. (The CLI it distributes is Rust, and is outside the scope of this entry.)



Sie können Tools und KI-Systeme nutzen, um Änderungen über eine einfache URL vorzuschlagen, z. B. https://www.bestpractices.dev/de/projects/14224/choose/edit?osps_ac_01_01_status=Met&osps_ac_01_01_justification=GitHub+enforced. Wie das geht, erfahren Sie in unserem Automatisierungsvorschlagssystem. Diese Daten sind unter der Community Data License Agreement – Permissive, Version 2.0 (CDLA-Permissive-2.0) verfügbar. Dies bedeutet, dass ein Datenempfänger die Daten mit oder ohne Änderungen weitergeben darf, solange der Datenempfänger den Text dieser Vereinbarung mit den weitergegebenen Daten zur Verfügung stellt. Bitte nennen Sie Sebastian und die OpenSSF Best Practices Badge-Mitwirkenden als Urheber.

Projekt-Badge-Eintrag im Besitz von: Sebastian.
Eintrag erstellt: 2026-08-24 15:57:55 UTC, zuletzt aktualisiert: 2026-08-26 02:10:48 UTC. Letztes erreichtes Badge: 2026-08-24 16:56:42 UTC.