{"source":"https://contributable.vercel.app","licence":"CC BY 4.0","methodology":"https://contributable.vercel.app/methodology","v":2,"owner":"mofa-org","name":"mofa","updatedAt":"2026-10-11T05:34:24.377Z","coveredSince":"2025-10-04T12:43:50.305Z","facts":{"owner":"mofa-org","name":"mofa","description":"MoFA - Modular Framework for Agents. Modular, Compositional and Programmable.","stars":292,"forks":171,"archived":false,"isFork":false,"license":"Apache-2.0","defaultBranch":"main","pushedAt":"2026-08-21T10:26:53Z","createdAt":"2024-06-26T16:39:18Z","topics":[],"languages":{"Rust":6958537,"Shell":38139,"PLpgSQL":10251,"Python":3860,"RenderScript":3},"frameworks":["Axum","Serde","Tokio"],"commits90d":0,"releases365d":30,"lastReleaseAt":"2026-02-11T10:19:47Z","gettingStarted":{"contributing":true,"codeOfConduct":true,"issueTemplates":true,"devcontainer":false,"cla":"none","channels":[{"kind":"discord","url":"https://discord.com/invite/hKJZzDMMm9"}],"policy":null}},"metrics":{"computedAt":"2026-10-11T05:34:24.377Z","outsidePulls":{"cohort":{"n":0,"merged":0,"closedUnmerged":0,"open":0,"mergeRate":null,"openShare":null,"evidence":{"merged":[],"closedUnmerged":[],"open":[]}},"firstTimers":{"n":0,"merged":0,"closedUnmerged":0,"open":0,"mergeRate":null,"openShare":null,"evidence":{"merged":[],"closedUnmerged":[],"open":[]}},"year":{"n":645,"merged":236,"closedUnmerged":103,"open":306,"mergeRate":0.696165191740413,"openShare":0.4744186046511628,"evidence":{"merged":[1678,1674,1672,1666,1642,1632,1617,1573,1437,1398,1397,1363,1340,1338,1326,1310,1300,1286,1278,1275],"closedUnmerged":[1614,1600,1597,1565,1564,1550,1510,1503,1499,1451,1450,1424,1408,1352,1345,1178,1163,1157,1140,1136],"open":[1671,1667,1663,1662,1661,1660,1659,1657,1655,1654,1646,1644,1639,1636,1635,1633,1621,1620,1619,1615]}}},"pullFirstResponse":{"n":0,"answered":0,"waiting":0,"medianHours":null,"p75Hours":null,"within48h":null,"within7d":null,"curve":[],"evidence":{"answered":[],"waiting":[]}},"timeToMerge":{"n":0,"merged":0,"medianHours":null,"evidence":[]},"issueFirstResponse":{"n":0,"answered":0,"waiting":0,"medianHours":null,"p75Hours":null,"within48h":null,"within7d":null,"curve":[],"evidence":{"answered":[],"waiting":[]}},"starter":{"counts":{"available":0,"claimed":7,"in-progress":43,"stale":5},"helpWantedAvailable":0,"issues":[{"n":1618,"title":"feat(testing): add MockClock timeout/deadline helper APIs","state":"in-progress","label":"beginner","createdAt":"2026-04-13T20:49:41Z","updatedAt":"2026-09-12T05:53:14Z"},{"n":1568,"title":"feat(testing): add Allure-compatible result exporter for test reports","state":"in-progress","label":"beginner","createdAt":"2026-04-03T05:40:19Z","updatedAt":"2026-09-12T05:54:13Z"},{"n":1546,"title":"feat(testing): add Markdown formatter for TestReport","state":"in-progress","label":"beginner","createdAt":"2026-03-29T21:08:54Z","updatedAt":"2026-09-13T01:06:41Z"},{"n":1507,"title":"[Bug] Inconsistent .env loading across LLM examples","state":"stale","label":"beginner","createdAt":"2026-03-28T04:34:39Z","updatedAt":"2026-04-01T07:16:13Z"},{"n":1493,"title":"Refactor: Use kernel's aggregate_outputs() in SequentialCoordinator instead of manual text joining","state":"claimed","label":"beginner","createdAt":"2026-03-27T09:57:07Z","updatedAt":"2026-04-01T07:16:09Z"},{"n":1475,"title":"[BUG] BudgetStatus missing token remaining/usage-ratio methods","state":"in-progress","label":"beginner","createdAt":"2026-03-26T15:49:21Z","updatedAt":"2026-04-01T07:16:05Z"},{"n":1468,"title":"[ENHANCEMENT] FallbackStrategy::on_failure lacks execution context -- add FallbackContext for intelligent degradation","state":"in-progress","label":"beginner","createdAt":"2026-03-25T05:15:12Z","updatedAt":"2026-04-01T07:16:03Z"},{"n":1466,"title":"[BUG] RetryCondition::OnTransient::matches() creates redundant String allocation on every pattern check","state":"in-progress","label":"beginner","createdAt":"2026-03-25T05:09:17Z","updatedAt":"2026-04-01T16:40:48Z"},{"n":1464,"title":"[BUG] speech module imports fail without feature gating - add base speech feature","state":"in-progress","label":"beginner","createdAt":"2026-03-25T00:27:52Z","updatedAt":"2026-04-01T07:15:59Z"},{"n":1402,"title":"mofa-cli doctor: align error handling with unified CliResult/CliError","state":"in-progress","label":"beginner","createdAt":"2026-03-20T18:44:16Z","updatedAt":"2026-03-20T19:58:03Z"},{"n":1396,"title":"refactor: replace raw TTS prints with structured tracing logs","state":"in-progress","label":"beginner","createdAt":"2026-03-20T13:40:14Z","updatedAt":"2026-03-20T14:02:38Z"},{"n":1394,"title":"[Refactor]: Replace Monitoring Engine raw prints with structured tracing logs","state":"in-progress","label":"beginner","createdAt":"2026-03-20T13:30:34Z","updatedAt":"2026-03-20T14:01:20Z"},{"n":1391,"title":"[Bug] fix:  mofa vibe commands fail due to missing mofa.vibe subpackage and invalid imports","state":"claimed","label":"help-wanted","createdAt":"2026-03-20T12:59:24Z","updatedAt":"2026-03-20T14:08:29Z"},{"n":1388,"title":"ci: Add manual workflow trigger (workflow_dispatch)","state":"in-progress","label":"beginner","createdAt":"2026-03-20T12:02:15Z","updatedAt":"2026-03-21T07:24:24Z"},{"n":1369,"title":"[Bug] fix: incorrect handling of whitespace in .env keys causes duplicate entries in vibe command.","state":"in-progress","label":"beginner","createdAt":"2026-03-19T07:00:50Z","updatedAt":"2026-03-20T06:54:30Z"},{"n":1351,"title":"[_check_and_setup_api_key] Saves API key to the wrong .env file location when run from a subdirectory","state":"in-progress","label":"beginner","createdAt":"2026-03-18T04:35:23Z","updatedAt":"2026-03-20T07:08:29Z"},{"n":1319,"title":"docs: Missing documentation for mofa-monitoring crate","state":"in-progress","label":"beginner","createdAt":"2026-03-17T08:08:42Z","updatedAt":"2026-03-17T08:09:20Z"},{"n":1307,"title":"bug(hitl): list_reviews API endpoint silently drops pagination and filtering parameters","state":"in-progress","label":"help-wanted","createdAt":"2026-03-16T20:07:28Z","updatedAt":"2026-03-16T20:11:14Z"},{"n":1301,"title":"Fix clippy warning gate and align workspace formatting baseline","state":"in-progress","label":"beginner","createdAt":"2026-03-16T18:33:13Z","updatedAt":"2026-03-17T05:35:11Z"},{"n":1298,"title":"mofa agent logs --limit returns earliest lines instead of most recent lines","state":"in-progress","label":"beginner","createdAt":"2026-03-16T15:29:24Z","updatedAt":"2026-03-16T15:29:56Z"},{"n":1295,"title":"chore: Fix `clippy::collapsible_if` warnings in Gemini SSE parser","state":"in-progress","label":"beginner","createdAt":"2026-03-16T13:40:17Z","updatedAt":"2026-03-20T05:06:39Z"},{"n":1292,"title":"chore: workspace source files are not formatted with rustfmt","state":"in-progress","label":"help-wanted","createdAt":"2026-03-16T12:51:50Z","updatedAt":"2026-03-16T13:42:02Z"},{"n":1269,"title":"docs: Missing documentation for mofa-monitoring crate","state":"in-progress","label":"beginner","createdAt":"2026-03-15T18:27:30Z","updatedAt":"2026-03-16T15:48:51Z"},{"n":1265,"title":"Discord invite link appears to be invalid","state":"stale","label":"beginner","createdAt":"2026-03-15T16:07:52Z","updatedAt":"2026-04-01T17:03:07Z"},{"n":1249,"title":"Performance Optimization: O(n) Lookup in `StateGraph.finish_points`","state":"in-progress","label":"beginner","createdAt":"2026-03-15T05:28:58Z","updatedAt":"2026-03-15T08:53:27Z"},{"n":1229,"title":"[BUG] mofa-sdk exports mocked LLMPlugin from mofa-plugins instead of mofa-foundation","state":"in-progress","label":"help-wanted","createdAt":"2026-03-14T09:32:43Z","updatedAt":"2026-03-14T10:24:48Z"},{"n":1201,"title":"[Bug]: `thread_count` in system metrics is always 0 or 1 due to `Option::iter().count()` misuse","state":"in-progress","label":"beginner","createdAt":"2026-03-12T19:43:16Z","updatedAt":"2026-03-12T19:49:48Z"},{"n":1183,"title":"Feat(testing) : TestStatus Predicates + Serde Support for Report Types","state":"in-progress","label":"beginner","createdAt":"2026-03-12T16:01:33Z","updatedAt":"2026-03-12T16:03:31Z"},{"n":1173,"title":"[Enhancement] Performance: ScheduleTiming::Cron variant wastes 216 bytes per instance","state":"in-progress","label":"beginner","createdAt":"2026-03-12T14:01:13Z","updatedAt":"2026-03-12T14:01:50Z"},{"n":1152,"title":"docs: examples/README.md is entirely in Chinese with broken code formatting","state":"claimed","label":"beginner","createdAt":"2026-03-11T19:37:57Z","updatedAt":"2026-03-11T19:40:10Z"},{"n":1108,"title":"Hot Reload Plugin Function Documentation","state":"in-progress","label":"beginner","createdAt":"2026-03-10T10:31:17Z","updatedAt":"2026-03-10T10:31:46Z"},{"n":1080,"title":"feat(testing) MockAgentBus Message Filters","state":"in-progress","label":"beginner","createdAt":"2026-03-09T17:11:31Z","updatedAt":"2026-03-09T17:13:28Z"},{"n":1078,"title":"feat(testing): Agent behavior assertion library for mofa-testing (Idea 6, Phase 2)","state":"stale","label":"beginner","createdAt":"2026-03-09T16:40:42Z","updatedAt":"2026-03-17T00:46:40Z"},{"n":1050,"title":"Micro Task 2: Coordination Pattern Schedulers (Sequential & Parallel)","state":"in-progress","label":"help-wanted","createdAt":"2026-03-08T10:59:08Z","updatedAt":"2026-03-08T10:59:39Z"},{"n":1047,"title":"ci: add weekly automated cargo clippy autofix workflow","state":"in-progress","label":"beginner","createdAt":"2026-03-08T10:16:01Z","updatedAt":"2026-03-08T10:16:27Z"},{"n":1044,"title":"ci: add weekly automated Cargo.lock update workflow","state":"in-progress","label":"beginner","createdAt":"2026-03-08T08:12:47Z","updatedAt":"2026-03-08T09:55:27Z"},{"n":1040,"title":"[Feature] CLI Scaffolding Tool for New Agent and Plugin Boilerplate","state":"in-progress","label":"beginner","createdAt":"2026-03-08T08:05:12Z","updatedAt":"2026-03-09T06:21:13Z"},{"n":988,"title":"feat: add Display impl for DebugEvent telemetry type","state":"in-progress","label":"beginner","createdAt":"2026-03-07T15:07:44Z","updatedAt":"2026-03-07T15:15:26Z"},{"n":986,"title":"test: add unit tests for runtime interrupt and fallback modules","state":"in-progress","label":"beginner","createdAt":"2026-03-07T15:04:06Z","updatedAt":"2026-03-07T15:06:51Z"},{"n":910,"title":"feat(inference): integrate native local inference backends into MoFA compute mesh runtime","state":"in-progress","label":"beginner","createdAt":"2026-03-06T13:30:32Z","updatedAt":"2026-03-06T14:05:12Z"},{"n":905,"title":"[Feature ] Add PDF and HTML Document Loaders to RAG Pipeline ( GSoC Task 10 - Phase 2)","state":"in-progress","label":"help-wanted","createdAt":"2026-03-06T12:16:53Z","updatedAt":"2026-03-06T13:17:14Z"},{"n":897,"title":"bug(llm): Agent session state corrupted after runtime plugin hot-reload","state":"in-progress","label":"help-wanted","createdAt":"2026-03-06T09:29:02Z","updatedAt":"2026-03-06T17:33:32Z"},{"n":809,"title":"[Feature Request] Add Rust CLI mofa vibe flow parity for Python vibe flow command","state":"in-progress","label":"beginner","createdAt":"2026-03-03T19:14:54Z","updatedAt":"2026-03-03T19:15:35Z"},{"n":796,"title":"test(workflow): add regression test for unmatched conditional routing behavior","state":"in-progress","label":"beginner","createdAt":"2026-03-03T13:26:18Z","updatedAt":"2026-03-03T13:27:43Z"},{"n":794,"title":"fix(executor): enforce execution_timeout_ms in WorkflowExecutor::execute","state":"in-progress","label":"beginner","createdAt":"2026-03-03T12:28:18Z","updatedAt":"2026-03-05T12:44:00Z"},{"n":778,"title":"enhancement(workflow): make stream() channel buffer size configurable via GraphConfig","state":"in-progress","label":"beginner","createdAt":"2026-03-03T02:40:34Z","updatedAt":"2026-03-03T02:57:18Z"},{"n":767,"title":"chore(api): Add #[must_use] to critical public result-returning APIs","state":"in-progress","label":"beginner","createdAt":"2026-03-02T17:10:28Z","updatedAt":"2026-03-03T02:57:45Z"},{"n":755,"title":"fix: remove remaining unwrap/expect usages in non-test runtime code","state":"in-progress","label":"beginner","createdAt":"2026-03-02T12:16:15Z","updatedAt":"2026-03-03T02:58:09Z"},{"n":671,"title":"SocketIoConfig::channel_buffer` is dead configuration","state":"in-progress","label":"beginner","createdAt":"2026-03-01T05:53:26Z","updatedAt":"2026-03-19T20:33:14Z"},{"n":667,"title":"Deterministic jitter in `RetryPolicy::ExponentialBackoff` results in correlated retries","state":"in-progress","label":"beginner","createdAt":"2026-03-01T04:51:58Z","updatedAt":"2026-03-07T02:16:23Z"},{"n":640,"title":"[Bug] ParallelAgent timeout_ms is silently ignored — spawned tasks run forever with no timeout enforcement","state":"in-progress","label":"beginner","createdAt":"2026-02-28T13:42:39Z","updatedAt":"2026-02-28T13:43:04Z"},{"n":621,"title":"[BUG] Multiple Utc::now() Calls Inside Loop and TOCTOU Race with exists()","state":"claimed","label":"beginner","createdAt":"2026-02-28T06:28:49Z","updatedAt":"2026-02-28T06:35:14Z"},{"n":612,"title":"[ENHANCEMENT] examples-check CI only runs cargo check — broken example logic goes undetected","state":"in-progress","label":"beginner","createdAt":"2026-02-28T01:36:21Z","updatedAt":"2026-02-28T01:36:49Z"},{"n":610,"title":"[FEAT] Add cargo-audit and cargo-deny to CI for automated security and license compliance","state":"stale","label":"beginner","createdAt":"2026-02-28T01:35:57Z","updatedAt":"2026-02-28T01:36:33Z"},{"n":609,"title":"[CHORE] cargo fmt --check not enforced in CI — code formatting can drift undetected","state":"in-progress","label":"beginner","createdAt":"2026-02-28T01:35:45Z","updatedAt":"2026-03-02T20:10:07Z"},{"n":605,"title":"[CHORE] Workspace-wide lint suppressions mask real bugs and undermine CI","state":"stale","label":"beginner","createdAt":"2026-02-28T01:34:46Z","updatedAt":"2026-03-10T01:07:27Z"},{"n":603,"title":"[BUG] mofa-macros proc-macro crate is declared but completely unimplemented","state":"claimed","label":"beginner","createdAt":"2026-02-28T01:34:16Z","updatedAt":"2026-03-08T10:46:53Z"},{"n":581,"title":"[REFACTOR] AgentProfile.tool_names is unused during agent construction","state":"claimed","label":"beginner","createdAt":"2026-02-27T11:28:45Z","updatedAt":"2026-03-15T19:09:00Z"},{"n":560,"title":"feat(workflow): introduce optional deterministic execution seed for retry jitter","state":"claimed","label":"beginner","createdAt":"2026-02-26T18:48:30Z","updatedAt":"2026-02-27T01:36:46Z"},{"n":534,"title":"bug: stop() sets PluginState::Paused in TTSPlugin and ToolPluginAdapter (follow-up to #448)","state":"in-progress","label":"beginner","createdAt":"2026-02-26T10:40:51Z","updatedAt":"2026-02-26T10:41:18Z"},{"n":466,"title":"feat: Implement comprehensive distributed tracing with OpenTelemetry","state":"in-progress","label":"help-wanted","createdAt":"2026-02-25T12:58:42Z","updatedAt":"2026-02-26T05:35:11Z"},{"n":465,"title":"feat: Implement agent event sourcing pattern","state":"in-progress","label":"help-wanted","createdAt":"2026-02-25T12:58:14Z","updatedAt":"2026-02-26T05:35:51Z"},{"n":464,"title":"feat: Implement workflow versioning and rollback system","state":"in-progress","label":"help-wanted","createdAt":"2026-02-25T12:58:01Z","updatedAt":"2026-02-26T05:36:30Z"},{"n":424,"title":"[Refactor] Returning only Options<T> silently swallows the deserialisation error in AgentConfig","state":"claimed","label":"beginner","createdAt":"2026-02-25T05:47:31Z","updatedAt":"2026-02-25T11:43:54Z"},{"n":419,"title":"🎨 Workflow Visualization - Deep Dive","state":"in-progress","label":"beginner","createdAt":"2026-02-25T04:44:13Z","updatedAt":"2026-04-26T03:07:49Z"}]},"responseWindow":{"hours":null,"people":0,"replies":0},"activeMaintainers":0},"series":[{"week":"2025-10-12","opened":0,"merged":0,"answered7d":0,"activity":0},{"week":"2025-10-19","opened":1,"merged":1,"answered7d":1,"activity":5},{"week":"2025-10-26","opened":0,"merged":0,"answered7d":0,"activity":2},{"week":"2025-11-02","opened":0,"merged":0,"answered7d":0,"activity":4},{"week":"2025-11-09","opened":0,"merged":0,"answered7d":0,"activity":0},{"week":"2025-11-16","opened":0,"merged":0,"answered7d":0,"activity":0},{"week":"2025-11-23","opened":0,"merged":0,"answered7d":0,"activity":0},{"week":"2025-11-30","opened":0,"merged":0,"answered7d":0,"activity":0},{"week":"2025-12-07","opened":0,"merged":0,"answered7d":0,"activity":0},{"week":"2025-12-14","opened":0,"merged":0,"answered7d":0,"activity":0},{"week":"2025-12-21","opened":0,"merged":0,"answered7d":0,"activity":0},{"week":"2025-12-28","opened":0,"merged":0,"answered7d":0,"activity":0},{"week":"2026-01-04","opened":0,"merged":0,"answered7d":0,"activity":0},{"week":"2026-01-11","opened":0,"merged":0,"answered7d":0,"activity":0},{"week":"2026-01-18","opened":0,"merged":0,"answered7d":0,"activity":0},{"week":"2026-01-25","opened":0,"merged":0,"answered7d":0,"activity":0},{"week":"2026-02-01","opened":0,"merged":0,"answered7d":0,"activity":0},{"week":"2026-02-08","opened":0,"merged":0,"answered7d":0,"activity":1},{"week":"2026-02-15","opened":35,"merged":20,"answered7d":32,"activity":87},{"week":"2026-02-22","opened":162,"merged":79,"answered7d":99,"activity":401},{"week":"2026-03-01","opened":136,"merged":71,"answered7d":85,"activity":270},{"week":"2026-03-08","opened":107,"merged":41,"answered7d":43,"activity":147},{"week":"2026-03-15","opened":82,"merged":15,"answered7d":17,"activity":98},{"week":"2026-03-22","opened":63,"merged":1,"answered7d":1,"activity":75},{"week":"2026-03-29","opened":19,"merged":1,"answered7d":3,"activity":23},{"week":"2026-04-05","opened":13,"merged":0,"answered7d":0,"activity":14},{"week":"2026-04-12","opened":12,"merged":3,"answered7d":2,"activity":14},{"week":"2026-04-19","opened":9,"merged":0,"answered7d":0,"activity":12},{"week":"2026-04-26","opened":3,"merged":1,"answered7d":1,"activity":5},{"week":"2026-05-03","opened":2,"merged":2,"answered7d":1,"activity":6},{"week":"2026-05-10","opened":0,"merged":0,"answered7d":0,"activity":1},{"week":"2026-05-17","opened":1,"merged":1,"answered7d":0,"activity":3},{"week":"2026-05-24","opened":0,"merged":0,"answered7d":0,"activity":4},{"week":"2026-05-31","opened":0,"merged":0,"answered7d":0,"activity":1},{"week":"2026-06-07","opened":0,"merged":0,"answered7d":0,"activity":1},{"week":"2026-06-14","opened":0,"merged":0,"answered7d":0,"activity":2},{"week":"2026-06-21","opened":0,"merged":0,"answered7d":0,"activity":1},{"week":"2026-06-28","opened":0,"merged":0,"answered7d":0,"activity":2},{"week":"2026-07-05","opened":0,"merged":0,"answered7d":0,"activity":1},{"week":"2026-07-12","opened":0,"merged":0,"answered7d":0,"activity":1},{"week":"2026-07-19","opened":0,"merged":0,"answered7d":0,"activity":1},{"week":"2026-07-26","opened":0,"merged":0,"answered7d":0,"activity":2},{"week":"2026-08-02","opened":0,"merged":0,"answered7d":0,"activity":1},{"week":"2026-08-09","opened":0,"merged":0,"answered7d":0,"activity":1},{"week":"2026-08-16","opened":0,"merged":0,"answered7d":0,"activity":1},{"week":"2026-08-23","opened":0,"merged":0,"answered7d":0,"activity":0},{"week":"2026-08-30","opened":0,"merged":0,"answered7d":0,"activity":0},{"week":"2026-09-06","opened":0,"merged":0,"answered7d":0,"activity":0},{"week":"2026-09-13","opened":1,"merged":0,"answered7d":0,"activity":1},{"week":"2026-09-20","opened":0,"merged":0,"answered7d":0,"activity":0},{"week":"2026-09-27","opened":0,"merged":0,"answered7d":0,"activity":0},{"week":"2026-10-04","opened":0,"merged":0,"answered7d":0,"activity":0}],"trend":{"flag":"unknown","recentMedianHours":null,"previousMedianHours":null,"recentN":1,"previousN":0,"openedThisWeek":0,"openedLastWeek":0},"programs":[{"program":"gsoc","slug":"mofa-org","name":"MoFA Org","years":[2026]}]}