Criteria adapted from the OpenSSF Best Practices Badge (MIT / CC BY 3.0) by OpenSSF contributors. Modified for AOSSIE multi-repo template use.
Purpose: Covers OpenSSF Best Practices criteria that are NOT auto-detected by OpenSSF Scorecard. Scorecard already handles: License, SAST tools, CI tests, Security Policy file, Branch Protection, Pinned Dependencies, Signed Releases, Maintained status, and Known Vulnerabilities.
Legend:
- π΄ MUST β Required for passing
- π‘ SHOULD β Required unless documented rationale given
- π΅ SUGGESTED β Optional but recommended
- βͺ N/A β Marked
[~]with justification
Scope: StabilityNexus/Fate-EVM-Frontend, the EVM frontend for Fate Protocol.
Last reviewed: 2026-10-26.
A criterion that does not apply cannot be failed, so Met counts both [x] satisfied and [~]
justified N/A items, over the full total of 49. This matches how other AOSSIE and Stability Nexus
projects score the same checklist, so the figures are comparable across repositories.
| Category | Met | of Total | Score | Status |
|---|---|---|---|---|
| Basics | 8 | 8 | 100% | π’ |
| Change Control | 3 | 6 | 50% | π‘ |
| Reporting | 8 | 8 | 100% | π’ |
| Quality | 9 | 11 | 82% | π’ |
| Security | 9 | 9 | 100% | π’ |
| Analysis | 4 | 7 | 57% | π‘ |
| Total | 41 | 49 | 84% | π’ |
Raw breakdown, for transparency: 28 satisfied [x], 13 justified N/A [~], 8 unmet [ ].
Unmet π΄ MUST items: version_unique.
Unmet π‘ SHOULD items: none.
-
π΄ description_good β The project README/website clearly describes what the software does and what problem it solves.
- Evidence URL: README.md β describes perpetual prediction pools, the dual-vault design, and the problem of order-book complexity.
-
π΄ interact β The project provides information on how to obtain the software, submit bug reports, and contribute.
- Evidence URL: README.md "Getting Started" and CONTRIBUTING.md.
-
π΄ contribution β
CONTRIBUTING.mdexplains the contribution process (e.g., PRs are used, how to open one).- Evidence URL: CONTRIBUTING.md "Pull Request Process".
-
π‘ contribution_requirements β
CONTRIBUTING.mdreferences acceptable contribution standards (coding style, tests required, etc.).- Evidence URL: CONTRIBUTING.md "Coding Style" and "Verifying a Change".
-
π΄ documentation_basics β Basic documentation exists for the software (README, Wiki, or docs folder).
-
[~] π΄ documentation_interface β Reference documentation describes the external interface (API inputs/outputs, CLI flags, config schema, etc.).
- Justification: N/A. This is a browser UI with no external API, CLI, or public configuration schema. It is a statically exported client that talks to on-chain contracts; the external interface belongs to the contracts repository.
-
π΄ discussion β Project has a searchable, URL-addressable discussion mechanism.
- Evidence URL: GitHub Issues and the Fate Discord channel.
-
π‘ english β Documentation is provided in English and English bug reports/comments are accepted.
- Note: All documentation, issues, and code comments are in English.
- π΅ repo_distributed β Project uses a distributed VCS (e.g., git). (SUGGESTED)
- Evidence URL: https://github.com/StabilityNexus/Fate-EVM-Frontend
-
π΄ version_unique β Each release has a unique version identifier (e.g., v1.0.0).
- Note: Unmet. The repository has no releases and no tags.
-
π΅ version_semver β Project uses SemVer or CalVer format. (SUGGESTED)
- Note: Unmet, pending a first release.
-
π΅ version_tags β Releases are tagged in the VCS. (SUGGESTED)
- Note: Unmet, pending a first release.
-
[~] π΄ release_notes β Each release includes human-readable release notes summarizing major changes.
- Justification: N/A under the continuous-delivery exemption. The frontend is deployed to GitHub Pages on merge to
mainand is not distributed as a versioned artifact for external reuse. Users always receive the current deployment.
- Justification: N/A under the continuous-delivery exemption. The frontend is deployed to GitHub Pages on merge to
-
[~] π΄ release_notes_vulns β Release notes identify every publicly known vulnerability (with CVE) fixed in that release.
- Justification: N/A. No publicly known vulnerabilities have been reported against this project, and no versioned releases are published.
-
π΄ report_process β A bug-reporting process exists.
- Evidence URL: CONTRIBUTING.md "Reporting Issues" and GitHub Issues.
-
π‘ report_tracker β An issue tracker is used to track individual bugs.
- Evidence URL: GitHub Issues β 46 issues in the last 12 months.
-
π΄ report_responses β A majority of bug reports submitted in the last 2β12 months have been acknowledged.
- Self-certification note: Measured on 2026-10-26 over the 36 issues opened 2 to 12 months earlier (2025-10-26 to 2026-08-26). An issue counts as acknowledged if it carries a reply from a person other than its author (bots excluded), or was closed by someone other than its author. An issue its author opened and closed alone is left out, since nobody else needed to respond. All 8 issues labelled
bugin that window were acknowledged (100%).
- Self-certification note: Measured on 2026-10-26 over the 36 issues opened 2 to 12 months earlier (2025-10-26 to 2026-08-26). An issue counts as acknowledged if it carries a reply from a person other than its author (bots excluded), or was closed by someone other than its author. An issue its author opened and closed alone is left out, since nobody else needed to respond. All 8 issues labelled
-
π‘ enhancement_responses β More than 50% of enhancement requests in the last 2β12 months have received a response.
- Self-certification note: Measured the same way, over the same window. All 9 issues labelled
enhancementin that window were acknowledged (100%): 2 with a reply and 7 closed by a maintainer.
- Self-certification note: Measured the same way, over the same window. All 9 issues labelled
-
π΄ report_archive β Reports and responses are publicly archived and searchable.
- Evidence URL: GitHub Issues β public repository, full history readable without an account.
-
π΄ vulnerability_report_process β A vulnerability reporting process is documented (e.g.,
SECURITY.md).- Evidence URL: SECURITY.md β private reporting route, what to include, 14-day acknowledgement target, and scope.
-
[~] π‘ vulnerability_report_private β If private vulnerability reporting is supported, the method for private submission is documented.
- Justification: N/A. The criterion is conditional on private reporting being supported. GitHub's built-in private vulnerability reporting is disabled on this repository, and enabling it requires admin access. SECURITY.md nevertheless documents a private contact route via direct message to a listed maintainer. This becomes applicable if the setting is enabled.
-
[~] π΄ vulnerability_report_response β Initial response to any vulnerability report received in the last 6 months was within 14 days.
- Justification: N/A. No vulnerability reports have been received.
-
π΄ build β A working build system exists that can auto-rebuild from source.
- Evidence URL:
npm run buildin package.json; the GitHub Pages workflow rebuilds from source on every merge tomain.
- Evidence URL:
-
π΅ build_common_tools β Common build tools are used. (SUGGESTED)
- Evidence URL: npm, with Next.js as the build tool. See package.json.
-
π‘ build_floss_tools β The project can be built using only FLOSS tools.
- Note: Node.js, npm, Next.js, TypeScript and Tailwind are all open source. No proprietary tooling is required to build.
-
π΅ test_invocation β The test suite can be invoked in a standard way for the language. (SUGGESTED)
- Evidence URL:
npm testruns vitest (package.json, vitest.config.ts): 49 tests in 6 files. CI runs it on every pull request.
- Evidence URL:
-
π΅ test_most β The test suite covers most code branches, input fields, and functionality. (SUGGESTED)
- Note: Unmet. Unit tests cover 6 of the 104 source files under
src/: the backup helpers, the sell estimate, permits, the rebalance simulation, WAD math and formatting. No coverage tool is configured, so no percentage is claimed. UI and wallet flows are tested by hand.
- Note: Unmet. Unit tests cover 6 of the 104 source files under
-
π΄ test_policy β The project has a general policy that new functionality must include tests.
- Evidence URL: CONTRIBUTING.md "Verifying a Change": new logic that can be tested outside the browser comes with a vitest test.
-
π΄ tests_are_added β Evidence exists that the test policy has been followed in recent major changes.
-
π΅ tests_documented_added β The test policy is documented in contribution instructions. (SUGGESTED)
- Evidence URL: CONTRIBUTING.md "Verifying a Change", and AGENTS.md "Commands".
-
π΄ warnings β At least one linter or compiler warning flag is enabled.
- Tool used: ESLint via
next lint, configured in eslint.config.mjs witheslint-config-next. TypeScript type checking runs as part ofnpm run build.
- Tool used: ESLint via
-
π΄ warnings_fixed β Warnings from the linter are addressed (not suppressed without reason).
- Evidence URL:
npm run lintandnpm run buildreport no warnings. The last two, areact-hooks/exhaustive-depswarning inPoolConfigurationStep.tsxand a@next/next/no-img-elementwarning inTokenImage.tsx, were fixed in the code rather than suppressed.
- Evidence URL:
-
π΅ warnings_strict β Project uses maximum strictness in linter config where practical. (SUGGESTED)
- Note: Unmet. The project uses the
eslint-config-nextdefaults rather than a hardened ruleset.
- Note: Unmet. The project uses the
-
π΄ know_secure_design β At least one primary developer knows how to design secure software.
- Self-certification note: Maintainers are familiar with secure-by-default design and threat modelling for Web3 frontends, including the risks of transaction construction, approval scope, and displaying untrusted on-chain data.
-
π΄ know_common_errors β At least one primary developer knows common vulnerability types for this software's category.
- Self-certification note: Maintainers are familiar with XSS, injection, and supply-chain risks in the frontend, and with reentrancy, oracle manipulation, and decimal or unit-scaling errors on the contract side that the UI must not misrepresent.
The six criteria below are marked N/A for a shared reason: this project performs no cryptographic operations of its own. Transaction signing and key custody are delegated entirely to the user's wallet, and hashing and ABI encoding are handled by the viem library. The project neither implements, selects, nor stores cryptographic material.
-
[~] π΄ crypto_published β Only publicly reviewed cryptographic protocols/algorithms are used by default.
- Justification: N/A. See the shared note above. The underlying EVM primitives (ECDSA over secp256k1, keccak-256) are standard and are applied by the wallet and by viem, not by this project.
-
[~] π‘ crypto_call β Project calls an established crypto library rather than reimplementing crypto functions.
- Justification: N/A by the shared note; where hashing or encoding is needed, viem is used. Nothing is reimplemented.
-
[~] π΄ crypto_working β No broken algorithms are used.
- Justification: N/A. See the shared note above.
-
[~] π΄ crypto_keylength β Key lengths meet NIST 2030 minimums by default.
- Justification: N/A. The project generates and stores no keys.
-
[~] π΄ crypto_password_storage β Passwords for external users are stored as iterated salted hashes.
- Justification: N/A. There are no user accounts and no passwords. Authentication is wallet-based.
-
[~] π΄ crypto_random β Cryptographic keys and nonces are generated using a CSPRNG.
- Justification: N/A. The project generates no cryptographic keys or nonces.
-
π‘ delivery_unsigned β Cryptographic hashes are NOT retrieved over plain HTTP without a signature check.
- Note: Dependencies are installed from the npm registry over HTTPS with integrity hashes pinned in
package-lock.json. The application fetches no hashes over plain HTTP.
- Note: Dependencies are installed from the npm registry over HTTPS with integrity hashes pinned in
-
π΄ static_analysis_fixed β All medium+ severity vulnerabilities found by static analysis are fixed in a timely manner after confirmation.
- Note: No medium or higher severity findings have been reported by static analysis to date.
-
π΅ static_analysis_common_vulnerabilities β The static analysis tool includes checks for common vulnerabilities. (SUGGESTED)
- Note: Unmet. The ESLint configuration does not currently include a security ruleset such as
eslint-plugin-security.
- Note: Unmet. The ESLint configuration does not currently include a security ruleset such as
-
π΅ static_analysis_often β Static analysis runs on every commit or at least daily. (SUGGESTED)
- Evidence URL: ci.yml runs ESLint and the type-checking build on every pull request and every push to
main.
- Evidence URL: ci.yml runs ESLint and the type-checking build on every pull request and every push to
-
π΅ dynamic_analysis β At least one dynamic analysis tool is applied before major releases. (SUGGESTED)
- Note: Unmet. No dynamic analysis tooling is configured.
-
π΅ dynamic_analysis_enable_assertions β Dynamic analysis / testing runs with assertions enabled. (SUGGESTED)
- Note: Unmet, dependent on there being an automated test suite.
-
[~] π΄ dynamic_analysis_fixed β Medium+ severity vulnerabilities found by dynamic analysis are fixed in a timely manner.
- Justification: N/A. No dynamic analysis has been run, so there are no findings to act on. This becomes applicable once
dynamic_analysisis met.
- Justification: N/A. No dynamic analysis has been run, so there are no findings to act on. This becomes applicable once
-
[~] π΅ dynamic_analysis_unsafe β If the project uses memory-unsafe languages, memory safety tools are used. (SUGGESTED)
- Justification: N/A. The project is written in TypeScript, a memory-safe language, and ships no native code.
Full-Stack / Next.js. The application is a static export (output: "export"), so it has no
server runtime, no API routes, and no server-side session or credential handling. This removes a
large class of criteria from scope, which is why the Cryptography section is entirely N/A.
Web3. Contract-level security belongs to StabilityNexus/Fate-Solidity, which is assessed
separately. This frontend must not misrepresent on-chain state; the most security-relevant class of
bug here is unit confusion, since three distinct numeric scales are in play (base-token decimals read
on-chain, WAD 1e18 for oracle values, and DENOMINATOR = 100000 for contract fees). This is
documented for contributors in CONTRIBUTING.md and AGENTS.md.
This checklist complements OpenSSF Scorecard (auto-detected checks) and is inspired by the OpenSSF Best Practices Badge passing criteria.