agaric

遵循以下最佳实践的项目将能够自愿的自我认证,并显示他们已经实现了核心基础设施计划(OpenSSF)徽章。

没有一套可以保证软件永远不会有缺陷或漏洞的做法;如果规范或假设是错误的,即使合适的方法也可能失败。也没有哪些做法可以保证一个项目能够维持健康和运作良好的开发者社区。但是,遵循最佳做法可以帮助改善项目的成果。例如,一些做法可以在发布之前进行多人评估,这可以帮助您找到其他难以找到的技术漏洞,并帮助建立信任,并希望不同公司的开发人员之间进行重复的交互。要获得徽章,必须满足所有“必须”和“禁止”的条款,满足所有“应该”条款或有合适的理由,所有“建议”条款必须满足或未满足(至少希望考虑)。欢迎通过 GitHub网站创建问题或提出请求进行反馈。另外还有一个一般讨论邮件列表

如果这是您的项目,请在您的项目页面上显示您的徽章状态!徽章状态如下所示: 项目12870的徽章级别为passing 这里是如何嵌入它:
您可以通过将其嵌入在您的Markdown文件中:
[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/12870/badge)](https://www.bestpractices.dev/projects/12870)
或将其嵌入到HTML中来显示您的徽章状态:
<a href="https://www.bestpractices.dev/projects/12870"><img src="https://www.bestpractices.dev/projects/12870/badge"></a>


这些是白银级别条款。您还可以查看通过黄金级别条款。

Baseline Series: 基准等级1 基准等级2 基准等级3

        

 基本 16/17

  • 常规

    请注意,其他项目可能使用相同的名称。

    Agaric — local-first, block-based note-taking app inspired by Org-mode and Logseq. Tauri 2 + React 19 + Rust.

    请使用 SPDX许可证表达格式;例子包括“Apache-2.0”,“BSD-2-Clause”,“BSD-3-Clause”,“GPL-2.0+”,“LGPL-3.0 +”,“MIT”和“(BSD-2-Clause OR Ruby)”。
    如果有多种语言,请将它们列为逗号分隔值(可选空格),并将它们从最多到最少使用。如果有长列表,请至少列出前三个最常见的列表。如果没有语言(例如,这是仅文档或仅测试项目),请使用单个字符“ - ”。请使用每种语言的常规大小写,例如“JavaScript”。
    通用平台枚举(CPE)是用于信息技术系统,软件和软件包的结构化命名方案。在报告漏洞时,它可用于多个系统和数据库。
  • 先决条件


    项目必须拥有通过徽章。 [achieve_passing]

    Self-asserted Passing tier; this submission completes the form.


  • 基本项目网站内容


    关于如何贡献的信息必须包括对可接受的贡献的要求(例如,引用任何所需的编码标准)。 (需要网址) [contribution_requirements]

    Explicit submission requirements in https://github.com/jfolcini/agaric/blob/main/CONTRIBUTING.md (DCO sign-off, prek-clean, tests for new behaviour, conventional-commit subjects).


  • 项目监督


    该项目应该有一个合法机制,所有对项目软件做出显著贡献的开发人员都声明他们有合法授权作出这些贡献。最常用且易于实施的方法是使用开发者原产地证书(DCO),用户可以在其提交中添加“signed-off-by”,另外,项目链接到DCO网站。本条款也可以使用贡献者许可协议(CLA)或其他法律机制实现。 (需要网址) [dco]
    DCO是推荐的机制,因为它易于实现,在源代码中进行跟踪,并且git使用“commit -s”直接支持“签名”功能。更有效的是,项目文件解释了该项目的“签名”手段。 CLA是一项法律协议,用于定义知识产权许可给组织或项目的条款。捐助者转让协议(CAA)是将知识产权权利转让给另一方的法律协议;项目不必具备CAA,因为CAA增加了潜在贡献者不愿贡献的风险,特别是如果接收者是一个营利性组织。 Apache Software Foundation CLA(个人贡献者许可证和公司CLA)是CLA的示例,用于确定项目的这些CLA的风险对项目的影响小于其获益。

    DCO v1.1 sign-off required AND enforced. Policy: https://github.com/jfolcini/agaric/blob/main/CONTRIBUTING.md#developer-certificate-of-origin-dco quotes DCO text verbatim. Enforcement workflow: https://github.com/jfolcini/agaric/blob/main/.github/workflows/dco.yml verifies every PR commit carries a Signed-off-by: trailer whose email matches the author; mismatched or missing sign-offs fail the check. dco is a required status check on the main-branch ruleset.



    该项目必须明确定义和记录其项目治理模式(决策方式,包括关键角色)。 (需要网址) [governance]
    需要有一些成熟的书面方式来作出决定和解决争端。在小项目中,这可能就像“项目拥有者和负责人做所有最终决定”一样简单。有各种治理模式,包括仁慈的独裁者和正式的精英统治;有关详细信息,请参阅治理模式。集中式(例如,单一维护者)和分散式(例如,组维护者)方法都已经在项目中成功使用。治理信息不需要记录创建项目分支的可能性,因为对于FLOSS项目来说总是可能的。

    https://github.com/jfolcini/agaric/blob/main/GOVERNANCE.md documents the BDFL model with @jfolcini as sole maintainer; includes Roles table, decision-making process for technical / roadmap / CoC / security, branch-protection asymmetry rationale, licensing/DCO rationale, and revisit triggers for governance-model changes.



    该项目必须采取行为守则,并将其发布在标准的位置。 (需要网址) [code_of_conduct]
    项目可能能够提高社区的文明程度,并通过采取行为守则来规定对可接受的行为的期望。这可以帮助在发生问题之前避免问题,并使项目成为更加欢迎的地方来鼓励贡献。这应该只关注项目社区/工作场所的行为。行为规范的示例是贡献者约定行为准则和Linux内核代码冲突

    https://github.com/jfolcini/agaric/blob/main/CODE_OF_CONDUCT.md present in repo root (Contributor Covenant variant) with enforcement contact.



    该项目必须明确定义和公开记录项目中的关键角色及其职责,包括这些角色必须执行的任务。必须清楚指出谁是什么角色,尽管这可能没有以相同的方式记录下来。 (需要网址) [roles_responsibilities]
    治理和角色和职责的文档可以在一个地方。

    Roles table at https://github.com/jfolcini/agaric/blob/main/GOVERNANCE.md#roles lists each role, who holds it, powers and responsibilities. Current roles: Maintainer/BDFL (@jfolcini) and Contributor (anyone with a merged PR). New roles added when revisit triggers fire (e.g., first sustained external contributor).



    如果任何一个开发者丧失工作能力或丧生,该项目必须能够继续保持最小的中断。特别是,在确认个人无行为能力或死亡的一周内,项目必须能够创建和关闭问题,接受提议的更改和发布软件版本。这可以通过确保其他人有任何必要的密钥,密码和合法权利来继续该项目。运行FLOSS项目的个人可以通过在锁箱中提供密钥,并提供任何所需的合法权利(例如DNS名称)来实现。 (需要网址) [access_continuity]

    Solo-maintainer project; bus factor = 1. There is no second person who could continue if the maintainer became unavailable. Acknowledged in https://github.com/jfolcini/agaric/blob/main/GOVERNANCE.md § Revisit triggers (BDFL unavailable > 30 days = invoke succession plan; currently informal). Flips to Met once a second maintainer is on-boarded.



    项目必须具有2个或更多的“公交车因子”。 (需要网址) [bus_factor]
    “公交车系数”(又名“卡车因子”)是指最少数量的项目成员,如果突然离开项目(“被公交车撞了”),项目会由于缺乏具备知识的或有能力的人员而暂停。 卡车因子 工具可以对GitHub上的项目进行估计。有关详细信息,请参阅Cosentino等人的评估Git存储库的卡车因子

    Solo project. Bus factor = 1. Honest call: this is the genuine current state of an early-stage solo OSS project. Tracked in https://github.com/jfolcini/agaric/blob/main/GOVERNANCE.md § Revisit triggers as a soft signal for governance-model evolution.


  • 文档


    该项目必须有一个文档化的路线图,描述项目打算做什么,至少在下一年做什么。 (需要网址) [documentation_roadmap]
    项目可能没有实现路线图,没关系。路线图的目的是帮助潜在的用户和贡献者了解项目的预期方向。它不需要特别详细。

    Public roadmap at https://github.com/jfolcini/agaric/tree/main/pending — each PEND-NN-*.md is a self-contained plan describing scope, acceptance criteria, and cost. Heavier-weight backlog at https://github.com/jfolcini/agaric/blob/main/pending/REVIEW-LATER.md. Covers next-cycle technical work + intentional non-goals.



    该项目必须包括项目生成的软件的架构(也称为高级别设计)的文档。如果项目不产生软件,请选择“不适用”(N/A)。 (需要网址) [documentation_architecture]
    软件架构解释了程序的基本结构,即程序的主要组件,它们之间的关系以及这些组件和关系的关键属性。

    Architecture surface fans out under https://github.com/jfolcini/agaric/tree/main/docs/architecture (tooling.md, ci-and-tooling.md, crdt-and-recovery.md, sync-and-network.md, data-and-events.md, editor-and-content.md, frontend.md, integrations.md, operations.md, queries.md, rejected.md). Top-level https://github.com/jfolcini/agaric/blob/main/docs/ARCHITECTURE.md gives the overview.



    该项目必须书面记录用户从项目生成的软件的安全性上可以获得和不能指望的内容(其“安全需求”)。 (需要网址) [documentation_security]
    这些是软件意图满足的安全需求。

    https://github.com/jfolcini/agaric/blob/main/SECURITY.md documents the threat model, in-scope/out-of-scope categories, supported versions, vulnerability reporting flow, response SLAs, existing automated coverage, trust anchors, untrusted inputs, accepted risks, mitigations, and the updater signing-key rotation procedure.



    该项目必须为新用户提供“快速启动”指南,以帮助他们快速使用该软件。 (需要网址) [documentation_quick_start]
    这个想法是向用户展示如何入门,使软件完全可以做事情。这对于潜在用户是至关重要的。

    https://github.com/jfolcini/agaric/blob/main/README.md describes installation per platform and basic usage; https://github.com/jfolcini/agaric/blob/main/docs/BUILD.md § Bootstrap gives cargo install --locked prek && prek install && npm ci developer quick-start; https://github.com/jfolcini/agaric/blob/main/CONTRIBUTING.md § Bootstrap mirrors it.



    项目必须努力使文档与当前版本的项目结果(包括项目生成的软件)保持一致。任何已知的文档缺陷使其不一致必须修正。如果文档基本是最新的,但是错误地包括一些不再是真实的旧信息,那么将其视为缺陷,然后像往常一样进行跟踪和修复。 [documentation_current]
    该文档可以包括有关软件版本之间的差异或更改的信息,与/或链接到旧版本的文档。这个条款的意图在于努力保持文档的一致性,而不是文档必须完美。

    Docs are versioned in the same repo as the code and required to move with it per https://github.com/jfolcini/agaric/blob/main/AGENTS.md § Documentation Map. A prek hook (https://github.com/jfolcini/agaric/blob/main/scripts/check-doc-code-paths.mjs) catches doc-vs-code drift on every commit; another (https://github.com/jfolcini/agaric/blob/main/scripts/check-md-link-targets.mjs) blocks broken markdown links.



    项目存储代码库首页和/或网站必须在获得成就的48小时内标识并超链接任何成就,包括此最佳实践徽章。 (需要网址) [documentation_achievements]
    一个成就是项目致力于满足的任何外部条款,包括徽章。该信息不需要在项目网站首页上。使用GitHub的项目可以通过将其添加到README文件中,将成果放在存储代码库首页。

    Front page https://github.com/jfolcini/agaric/blob/main/README.md displays a hyperlinked badge row immediately under the logo for every public achievement: CI (workflow status), Release, License (GPL-3.0-or-later), OpenSSF Scorecard, OpenSSF Best Practices project 12870, SLSA 3, Tauri 2, and Platforms. Each badge links to its source of truth.


  • 无障碍和国际化


    该项目(项目网站和项目成果)都应遵循无障碍最佳做法,使残疾人仍然可以参与项目,并在合理的情况下使用项目成果。 [accessibility_best_practices]
    对于Web应用程序,请参阅 Web 内容无障碍指导 (WCAG 2.0,英文) 以及其支持文档 理解 WCAG 2.0(英文);或者 W3C 无障碍信息(英文). 图形界面(GUI)应用考虑使用环境特定的无障碍指导(例如 Gnome, KDE, XFCE, Android, iOS, Mac, 以及 Windows). 一些TUI应用 (例如,`ncurses` 程序) 可以做一些特定的工作,增强可访问性(例如,`alpine` 的 `force-arrow-cursor` 设置)。多数命令行应用没有特别的无障碍设置。本条款经常是不涉及(N/A),例如,对于组件库。以下是一些要采取的行动或需要考虑的问题的例子:
    • 提供非文字内容的文字替代,以便于转换为其他需要的格式,如大字体、盲文、语音、符号或者简单文字( WCAG 2.0 指导 1.1 (英文))
    • 颜色不被用作传达信息,指示动作,提示响应或区分视觉元素的唯一视觉方式。 ( WCAG 2.0 指导 1.4.1(英文))
    • 文本和文字图像的视觉呈现对比度至少为4.5:1,除了大文本,次要文本和标识符之外。 ( WCAG 2.0 指导 1.4.3(英文))
    • 使用键盘可访问所有功能 (WCAG 指导 2.1)
    • 图形界面应用(GUI)或者Web应用在目标平台上,应该至少使用一种屏幕阅读器测试(例如,NVDA;Jaws;Windows上的WindowEyes;Mac & iOS上的VoiceOver;Linux/BSD上的Orca;Android上的TalkBack)。TUI程序可以减少过度渲染以防止屏幕阅读器的冗余读取。

    Component tests run vitest-axe audits enforced by an axe-presence prek hook (https://github.com/jfolcini/agaric/blob/main/scripts/check-axe-presence.sh + https://github.com/jfolcini/agaric/blob/main/prek.toml). https://github.com/jfolcini/agaric/blob/main/AGENTS.md mandates render + interaction + axe(container) for every component. 44px touch-target floor documented in https://github.com/jfolcini/agaric/blob/main/docs/UX.md § Touch; ARIA labels required on icon-only controls.



    该项目产生的软件应该被国际化,以便为目标受众的文化,地区或语言进行简单的本地化。如果国际化(i18n)不适用(例如,该软件不会生成针对最终用户的文本,并且不排序可读文本),请选择“不适用”(N/A)。 [internationalization]
    本地化“是指适应产品,应用或文档内容以满足特定目标市场(语言环境)的语言,文化和其他要求。国际化是“设计和开发产品,应用或文档内容,使不同文化,地区或语言的目标受众更容易本地化”。 (请参阅 W3C的“本地化与国际化”)。软件只需通过国际化即可达到此标准。不需要另一种特定语言的本地化,因为一旦软件已被国际化,其他人就可以从事本地化。

    i18next + react-i18next wired up; every user-facing string flows through t('key') keys with namespaced catalogue files at https://github.com/jfolcini/agaric/tree/main/src/lib/i18n (agenda, block, common, editor, errors, history, pages, properties, references, settings, shortcuts, sync, toolbar). Currently single-locale (English) but the infrastructure makes localization a catalogue add.


  • 其他


    如果项目站点(网站,存储库和下载URL)存储用于外部用户认证的密码,则必须使用密钥拉伸(迭代)算法将密码存储为具有每用户盐值的迭代散列(例如,PBKDF2,Bcrypt或Scrypt)。如果项目站点不存储密码,请选择“不适用”(N/A)。 [sites_password_security]
    请注意,使用 GitHub 符合此条款。此条款仅适用于用于外部用户认证到项目站点的密码。如果项目站点必须登录到其他站点,则可能需要为此目的存储密码(因为使用像Bcrypt这样的算法会使这些密码无效)。本条款将 crypto_password_storage 条款应用于项目站点,类似于sites_https条款。

    Local-first desktop+mobile app with no remote authentication and no server-stored passwords. Sync uses TLS + mTLS between the user's own paired devices (https://github.com/jfolcini/agaric/blob/main/src-tauri/src/sync_cert.rs); OAuth tokens for the optional Google Calendar integration are stored in the OS keychain via the keyring crate — never as project-managed passwords.


 变更控制 1/1

 报告 3/3

  • 错误报告流程


    项目必须使用问题跟踪器来跟踪每个问题。 [report_tracker]

    GitHub Issues at https://github.com/jfolcini/agaric/issues — public, searchable, URL-addressable per issue.


  • 漏洞报告流程


    除了要求匿名的报告者外,该项目必须对过去12个月内解决的所有漏洞报告的报告者表示感谢。如果过去12个月没有修复漏洞,请选择“不适用”(N/A)。 (需要网址) [vulnerability_report_credit]

    No vulnerabilities have been reported against Agaric itself in the last 12 months. The only related CVE in this window — GHSA-7gmj-67g7-phm9 / CVE-2026-42184 — was an upstream Tauri advisory; Agaric simply bumped the dependency. Credits template ready at https://github.com/jfolcini/agaric/blob/main/SECURITY.md#credits for the first downstream report.



    该项目必须有一个书面的流程来响应漏洞报告。 (需要网址) [vulnerability_response_process]
    这与security_report_process有很强的相关性,它需要有一个书面的流程来报告漏洞。它还涉及到spam_report_response,它需要在一定时间内响应漏洞报告。

    https://github.com/jfolcini/agaric/blob/main/SECURITY.md documents the full process: private-reporting via GitHub Security Advisory (https://github.com/jfolcini/agaric/security/advisories/new), 7-day acknowledgement target, 14-day triage, 30-day fix-or-plan, public disclosure via tagged release + GHSA. Includes the updater signing-key rotation procedure for the worst-case key-leak scenario.


 质量 19/19

  • 编码标准


    该项目必须确定其使用的主要语言的具体编码风格指南,并要求贡献一般情况下符合此要求。 (需要网址) [coding_standards]
    在大多数情况下,这是通过参考一些现有的风格指南来完成的,可能列出差异。这些风格指南可以包括提高可读性的方法和减少缺陷可能性(包括漏洞)的方法。许多编程语言有一个或多个广泛使用的风格指南。样式指南的示例包括 Google风格指南(英文) SEI CERT编码标准(英文)

    Canonical coding-standards doc: https://github.com/jfolcini/agaric/blob/main/AGENTS.md (architectural invariants, mandatory patterns, anti-patterns, testing conventions). Per-tool configs: https://github.com/jfolcini/agaric/blob/main/biome.json (TS/JS formatting + linting), https://github.com/jfolcini/agaric/blob/main/src-tauri/Cargo.toml [lints] (clippy pedantic + nursery + unsafe_code = "deny"), https://github.com/jfolcini/agaric/blob/main/.editorconfig, https://github.com/jfolcini/agaric/blob/main/.sqruff.



    如果至少有一个FLOSS工具可以应用于所选择的语言,项目必须自动执行其选定的编码风格。 [coding_standards_enforced]
    这可以使用静态分析工具和/或通过代码重新格式化强制代码实现。在许多情况下,工具配置包含在项目的存储库中(因为不同的项目可能会选择不同的配置)。项目可以允许风格例外(通常会);在发生例外的情况下(应该很少),它们必须在其位置的代码中记录在案,以便可以对这些例外进行检视,并使工具能够在将来自动处理它们。这些工具的例子包括ESLint(JavaScript)和Rubocop(Ruby)。

    https://github.com/jfolcini/agaric/blob/main/prek.toml runs biome + clippy + cargo-deny + cargo-machete + sqruff + zizmor + typos + tauri-bindings-parity + axe-presence + ipc-error-path-coverage + snapshot-redaction + more on every commit. https://github.com/jfolcini/agaric/blob/main/.github/workflows/_validate.yml runs the same set in CI. Main-branch ruleset requires validate-all to pass before any PR merges.


  • 可工作的构建系统


    本地二进制文件的构建系统必须遵守传递给它们的相关编译器和链接器(环境)变量(例如CC,CFLAGS,CXX,CXXFLAGS和LDFLAGS),并将它们传递给编译器和链接器。构建系统可以使用附加标志来扩展它们,但不能简单地用自己的替换提供的值。如果没有生成本地二进制文件,请选择“不适用”(N/A)。 [build_standard_variables]
    应该很容易启用特殊的构建功能,如地址消毒剂(Address Sanitizer,ASAN),或符合发布加固最佳实践(例如,通过轻松打开编译器标志来实现)。

    Build is Cargo + npm + Tauri CLI — these honour standard environment variables (CARGO_TARGET_DIR, CARGO_HOME, NPM_CONFIG_*, RUSTFLAGS, etc.) by construction. No custom build system overrides them. Build commands documented at https://github.com/jfolcini/agaric/blob/main/docs/BUILD.md.



    构建和安装系统在在相关标志中要求时,应该保留调试信息(例如,“install -s”未被使用)。如果没有构建或安装系统(例如典型的JavaScript库),请选择“不适用”(N/A)。 [build_preserve_debug]
    例如,如果使用这些语言,则应该设置CFLAGS(C)或CXXFLAGS(C ++)创建相关的调试信息,并且在安装过程中不应该剥离它们。支持和分析时,需要调试信息,也可用于测量编译二进制文件中加固特性的存在。

    Dev/test profile preserves debug info by default (Cargo's [profile.dev] defaults). Release profile keeps line-table debug info for crash diagnostics while applying panic = "abort" for smaller binaries (see https://github.com/jfolcini/agaric/blob/main/src-tauri/Cargo.toml lines 286-299). CI uploads coverage + playwright trace artefacts on failure (https://github.com/jfolcini/agaric/blob/main/.github/workflows/_validate.yml).



    如果子目录中存在交叉依赖关系,则由项目生成的软件的构建系统必须不能递归地构建子目录。如果没有构建或安装系统(例如典型的JavaScript库),请选择“不适用”(N/A)。 [build_non_recursive]
    项目构建系统的内部依赖关系信息需要准确,否则,对项目的更改可能无法正确构建。不正确的构建可能会导致缺陷(包括漏洞)。大型构建系统中的常见错误是使用“递归构建”或“递归生成”,即包含源文件的子目录的层次结构,其中每个子目录都是独立构建的。除非每个子目录完全独立,否则这是一个错误,因为依赖关系信息不正确。

    No recursive make. The build graph is Cargo workspace (single root https://github.com/jfolcini/agaric/blob/main/src-tauri/Cargo.toml) + npm scripts (single root https://github.com/jfolcini/agaric/blob/main/package.json) + Tauri CLI orchestration. No subdirectory cross-dependency rebuild loops.



    该项目必须能够重复从源代码文件生成的过程,并获得完全相同的比特位结果。如果没有发生构建(例如,直接使用源代码而不是编译使用的脚本语言),请选择“不适用”(N/A)。 [build_repeatable]
    GCC和clang用户可能会发现-frandom-seed选项有用;在某些情况下,这可以通过强制某种排序来解决。更多建议可以在可重复构建(英文)站点找到。

    Lockfiles committed: https://github.com/jfolcini/agaric/blob/main/package-lock.json and https://github.com/jfolcini/agaric/blob/main/src-tauri/Cargo.lock. CI uses npm ci (lockfile-strict) and cargo install --locked everywhere (https://github.com/jfolcini/agaric/blob/main/.github/workflows/_validate.yml). sqlx compile-time queries cached offline in src-tauri/.sqlx/ for hermetic Rust builds without a live database.


  • 安装系统


    该项目必须提供一种使用常用惯例轻松安装和卸载由项目生成的软件的方法。 [installation_common]
    示例包括使用软件包管理器(在系统或语言级别),“make install/uninstall”(支持DESTDIR),标准格式的容器或标准格式的虚拟机映像。安装和卸载过程(例如,打包)可以由第三方FLOSS软件实现。

    Releases ship in each platform's commonly-used install convention: .deb + .AppImage + .rpm (Linux), .msi + .exe (Windows), .dmg + .app.tar.gz (macOS), .apk (Android). Each is the system-level package format on its target OS — exactly the kind of system-or-language-level package manager the criterion's examples list. Asset names visible at https://github.com/jfolcini/agaric/releases/latest. Future Flathub/Homebrew/winget distribution tracked in https://github.com/jfolcini/agaric/blob/main/pending/REVIEW-LATER.md.



    最终用户的安装系统必须遵守用于在安装时选择构建工件写入位置的标准约定。例如,如果在POSIX系统上安装文件,它必须遵守DESTDIR环境变量。如果没有安装系统或没有标准惯例,请选择“不适用”(N/A)。 [installation_standard_variables]

    Cargo + npm both honour standard install paths and DESTDIR-like patterns (CARGO_INSTALL_ROOT, --prefix on Tauri bundles via the per-platform installer settings in https://github.com/jfolcini/agaric/blob/main/src-tauri/tauri.conf.json). Tauri bundle installers (.deb, .msi, .dmg) install to each OS's canonical location automatically.



    该项目必须为潜在开发人员提供一种快速安装所有项目成果和支持环境所必需的环境,包括测试套件和测试环境。必须通过常规惯例执行。 [installation_development_quick]
    可以使用生成的容器和/或安装脚本来实现。外部依赖关系一般通过调用系统和/或语言包管理器(根据 external_dependencies 条款)进行安装。

    https://github.com/jfolcini/agaric/blob/main/docs/BUILD.md § Bootstrap and https://github.com/jfolcini/agaric/blob/main/CONTRIBUTING.md § Bootstrap give a 3-command quick start: cargo install --locked prek && prek install && npm ci. Toolchain versions pinned (Node in https://github.com/jfolcini/agaric/blob/main/.nvmrc; Rust via rust-toolchain.toml or rustup stable).


  • 外部维护的组件


    项目必须以计算机可处理的方式列出外部依赖关系。 (需要网址) [external_dependencies]
    通常这是使用包管理器和/或构建系统的约定完成的。请注意,这有助于实施 installation_development_quick

    项目必须监视或定期检查其外部依赖(包括便利副本)以检测已知的漏洞,并修复可利用的漏洞或将其验证为不可利用的漏洞。 [dependency_monitoring]
    这可以使用源分析器/依赖项检查工具/软件组成分析工具(例如OWASP的Dependency-CheckSonatype的Nexus AuditorSynopsys的Black Duck软件组成分析Bundler-audit(针对Ruby))来完成。一些程序包管理器包括执行此操作的机制。如果无法利用组件的漏洞,这是可以接受的,但是这种分析是困难的,有时简单地更新或修复零件就更容易。

    Three independent monitors: (1) Dependabot at https://github.com/jfolcini/agaric/blob/main/.github/dependabot.yml — weekly for github-actions, npm, cargo, with explicit grouping rules per AGENTS.md § Coupled Dependency Updates. (2) cargo deny check advisories (blocking) + cargo audit (warn) per https://github.com/jfolcini/agaric/blob/main/.github/workflows/_validate.yml. (3) npm audit via better-npm-audit honouring https://github.com/jfolcini/agaric/blob/main/.nsprc (90-day waiver expiry).



    该项目必须满足下述情况之一:
    1. 可以轻松识别和更新重用的外部维护组件;
    2. 使用系统或编程语言提供的标准组件。
    这样,如果在重用的组件中发现了一个漏洞,将容易更新该组件。 [updateable_reused_components]
    符合这一条款的典型方法是使用系统和编程语言的包管理系统。许多FLOSS程序与“便利库”一起分发,这些库是标准库的本地副本(可能是分支)。一般没问题。但是,如果程序*必须*使用这些本地(分支)副本,则“标准”库的安全更新将使这些附加副本仍然易受攻击。这对于基于云的系统尤其是一个问题;如果云提供商更新他们的“标准”库,但程序不会使用它们,那么这些更新实际上不会有帮助。参见,例如,“Chromium:为什么它不在Fedora中作为适当的包”(Tom Callaway)

    Dependabot keeps every direct dependency current automatically. Lockfile regeneration handled by https://github.com/jfolcini/agaric/blob/main/scripts/bump-version.sh on release. Coupled-dep stacks (Tauri, React, TipTap, Radix, sqlx, tokio, rustls) grouped into single PRs by https://github.com/jfolcini/agaric/blob/main/.github/dependabot.yml so they move in lockstep — the rule that prevents fragmented upgrades.



    该项目应避免使用已弃用或过时的功能和API,如果FLOSS替代品在其使用的技术集合(“技术堆栈”)中以及项目支持的大多数用户中可用(以便用户可以随时访问该替代品)。 [interfaces_current]

    Tauri-specta auto-generates https://github.com/jfolcini/agaric/blob/main/src/lib/bindings.ts on every Rust IPC change; the tauri-bindings-parity prek hook in https://github.com/jfolcini/agaric/blob/main/prek.toml fails CI if the generated file drifts from the Rust source. AGENTS.md anti-patterns block deprecated React APIs (React.forwardRef, React.ComponentRef, ambient JSX.* namespace); a no-legacy-react-apis prek hook enforces it.


  • 自动测试套件


    必须将自动测试套件应用于至少一个分支的共享代码库的每次签入。该测试套件必须生成关于测试成功或失败的报告。 [automated_integration_testing]
    这个要求可以被视为test_continuous_integration的一个子集,但是仅仅是测试,而不需要持续集成。

    Integration suites run on every push + PR via https://github.com/jfolcini/agaric/blob/main/.github/workflows/_validate.yml: Playwright E2E (https://github.com/jfolcini/agaric/tree/main/e2e), vitest integration tests across the React tree, and cargo nextest Rust integration tests. CI publishes coverage + Playwright trace + nextest summary artefacts on each run.



    该项目必须为过去六个月内修复的至少50%的错误,在自动化测试套件中添加回归测试。 [regression_tests_added50]

    Hard policy in https://github.com/jfolcini/agaric/blob/main/AGENTS.md § Testing and https://github.com/jfolcini/agaric/blob/main/CONTRIBUTING.md § Patch submission: every bug fix lands with a regression test. Recent examples: https://github.com/jfolcini/agaric/commit/b9116ae9 (Loro sync + toast-dedup regression tests), https://github.com/jfolcini/agaric/commit/30d988c3 (KeyboardShortcuts regression coverage).



    如果有至少一个FLOSS工具可以以所选语言度量此条款,该项目的FLOSS自动测试套件必须具有至少80%语句覆盖率。 [test_statement_coverage80]
    许多FLOSS工具可用于度量测试覆盖范围,包括gcov / lcov,Blanket.js,Istanbul和JCov。请注意,满足这个条款并不能保证测试套件是完备的,而不满足该条款则意味着测试套件很差。

    Coverage gates declared in https://github.com/jfolcini/agaric/blob/main/vitest.config.ts: lines: 80, functions: 80, statements: 80, branches: 75. Merged 3-shard vitest coverage currently reports ~87-88% statements / ~88% lines per the PEND-44 baseline (https://github.com/jfolcini/agaric/blob/main/pending/PEND-44-coverage-90.md). Rust coverage via cargo-llvm-cov wired in https://github.com/jfolcini/agaric/blob/main/.github/workflows/_validate.yml.


  • 新功能测试


    该项目必须具有正式的书面策略,一旦添加了主要的新功能,新功能的测试必须被添加到自动测试套件中。 [test_policy_mandated]

    Documented test-with-feature policy: https://github.com/jfolcini/agaric/blob/main/CONTRIBUTING.md § Patch submission ("Add tests for new or changed behaviour") + https://github.com/jfolcini/agaric/blob/main/AGENTS.md § Testing ("Every exported function gets happy-path + error-path tests; components get render + interaction + axe(container)"). https://github.com/jfolcini/agaric/blob/main/PROMPT.md mandates the same on the agent loop. Enforced server-side via the validate-all required check + DCO.



    该项目必须在其关于变更建议的书面指导中包括要为主要新功能添加测试的策略。 [tests_documented_added]
    但是,只要在实践中添加了测试,即使是非正式规则也是可以接受的。

    'Add tests for new or changed behaviour' policy is documented in https://github.com/jfolcini/agaric/blob/main/CONTRIBUTING.md and https://github.com/jfolcini/agaric/blob/main/AGENTS.md (Testing section). PROMPT.md reinforces it for the agent-loop.


  • 警告标志


    在实际允许时,项目必须最大限度地严格修复项目生成的软件中的警告。 [warnings_strict]
    某些项目无法有效启用某些警告。需要证明的是,项目正在努力的启用警告标志,以便早期发现错误。

    Workspace-level Rust lints in https://github.com/jfolcini/agaric/blob/main/src-tauri/Cargo.toml : unsafe_code = "deny" plus clippy pedantic and nursery groups enabled. Biome config at https://github.com/jfolcini/agaric/blob/main/biome.json uses the recommended + strict rule set.


 安全 13/13

 分析 2/2


该数据可在社区数据许可协议 – 许可性,版本 2.0 (CDLA-Permissive-2.0)下获取。这意味着数据接收方可以共享数据,无论是否经过修改,只要数据接收方在共享数据时提供本协议文本。请注明Javier Folcini和OpenSSF最佳实践徽章贡献者。

项目徽章条目拥有者: Javier Folcini.
最后更新于 2026-05-17 05:56:35 UTC, 最后更新于 2026-05-17 08:50:28 UTC。 最后在 2026-05-17 07:53:16 UTC 获得通过徽章。