Звіт у форматі JSON машиночитний
{
"data": {
"repo": {
"topics": [
"credit-risk",
"excel",
"financial-modeling",
"llm-tools",
"mcp",
"openpyxl",
"ai-agents",
"audit-trail",
"data-lineage",
"dcf",
"lbo",
"mcp-server",
"valuation",
"yaml-to-excel"
],
"is_fork": false,
"size_kb": 2586,
"has_wiki": false,
"homepage": "https://pypi.org/project/modelforge-finance/",
"languages": {
"HTML": 21391,
"Python": 4094149,
"PLpgSQL": 8118,
"Dockerfile": 1999,
"TypeScript": 13510
},
"pushed_at": "2026-06-30T01:39:57Z",
"created_at": "2026-04-17T00:22:32Z",
"owner_type": "User",
"updated_at": "2026-06-30T01:40:01Z",
"description": "Bulge-tier Excel financial model factory — every cell live-formulated, every number traceable",
"is_archived": false,
"is_disabled": false,
"license_spdx": null,
"default_branch": "master",
"license_spdx_raw": "NOASSERTION",
"primary_language": "Python",
"significant_languages": [
"Python"
]
},
"owner": {
"blog": null,
"name": "Luka",
"type": "User",
"login": "Whatsonyourmind",
"company": null,
"location": "Milano, Italy",
"followers": 12,
"avatar_url": "https://avatars.githubusercontent.com/u/248369826?v=4",
"created_at": "2025-12-07T23:39:12Z",
"is_verified": null,
"public_repos": 20,
"account_age_days": 226
},
"license": {
"state": "custom",
"spdx_id": null,
"raw_spdx": "NOASSERTION",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.12.0",
"kind": "minor",
"published_at": "2026-06-22T15:17:43Z"
},
{
"tag": "v0.11.2",
"kind": "patch",
"published_at": "2026-05-27T22:22:43Z"
},
{
"tag": "v0.9.7",
"kind": "patch",
"published_at": "2026-05-15T08:47:03Z"
},
{
"tag": "v0.9.6",
"kind": "patch",
"published_at": "2026-05-14T14:27:18Z"
},
{
"tag": "v0.9.5",
"kind": "patch",
"published_at": "2026-05-14T13:28:37Z"
}
],
"recent_commits": [
{
"oid": "a029c9586965d3728f36778d58851b1f60f8358c",
"body": "Root cause of the 3.11-only ic_memo grounding failure: extract_numeric_tokens\napplied its identifier-weld guard (_is_year_or_id) only to bare plain numbers,\nnot to the suffixed currency/percent/bps/multiple path. So '3b' was parsed as\na 3-billion currency token out of a sha256 fragment ('...5e04a662\n[…]\nling scale already requires a word boundary).\nAdds regression tests for the exact sha256 fragment and the weld case. Grounding\ntolerance and fail-closed behavior unchanged; 19/19 grounding tests pass.",
"is_bot": false,
"headline": "fix(deck): don't parse hash/identifier-welded numbers as currency tokens",
"author_name": "Luka Stanisljevic",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-30T01:39:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "379efc720487384ca54a74a4d8a2952442845dc9",
"body": "The fail-closed grounding gate previously reported only the token text and\nslide index (e.g. \"'3b'@slide8\"), which is undiagnosable when a miss\nreproduces on only one interpreter and cannot be reproduced locally. Capture\nthe full source string the token was extracted from plus the nearest pool\nvalue\n[…]\nand gap on each GroundingFinding, and surface them in the\nDeckAdapterError sample. Purely diagnostic — the matching tolerance and\nfail-closed behavior are unchanged (17/17 grounding tests still pass).",
"is_bot": false,
"headline": "diag(deck): make numeric-grounding misses self-explaining in CI",
"author_name": "Luka Stanisljevic",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-30T01:30:52Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ceaf919d9338d1fc394208caa0e61e641474059d",
"body": "…-parity test)\n\ntest_golden_vectors_match_ts_kernel had been failing: the fixture's unicode string was\ndouble-encoded (cafe-with-acute -> its UTF-8 bytes reinterpreted as Latin-1) by a past\nfile round-trip, so Python hashed the corrupted string and missed the golden TS hash.\nProven: content_hash of \n[…]\nty were\nCORRECT all along — only the fixture was stale. Restored the string and wrote it\nASCII-escaped (ensure_ascii) so an encoding round-trip can never mangle it again.\nSuite 1539/1 -> 1540/0 green.",
"is_bot": false,
"headline": "test(oracert): repair mojibake'd unicode golden vector (restores hash…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-23T04:36:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8ea3ee2c9c831d5906a2c2a6605ef9fb904c32cd",
"body": "- Genericize docstrings/comments that referenced an internal review\n process (drop IC-review / round-2 / Killer-1 framing) while keeping\n the underlying engineering facts (formula-density semantics, the\n DCF-vs-market-cap Trust rule, acceptance criteria).\n- spec/hgb_carveout.py: drop named invest\n[…]\nypes from a docstring.\n- Move compliance/soc2_vendor_comparison.md out of the public tree\n (internal vendor/budget note) and gitignore it.\n- web/app.py: remove a dead footer link to a gitignored doc.",
"is_bot": false,
"headline": "chore: scrub internal review-process notes from public source comments",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-22T15:45:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "dfb62409041c4862dbbe48046f894035fa20fbbb",
"body": "- Remove DEPLOY_NOW.md (owner SaaS deploy playbook containing local\n machine paths, secret-file locations, and go-to-market notes) — this\n belongs in the private repo alongside the other internal docs that are\n already gitignored.\n- gitignore DEPLOY_*.md and build_*.xlsx test artifacts so they cannot\n be re-committed.\n- CHANGELOG: generalize a release note to drop named outreach prospects.",
"is_bot": false,
"headline": "chore: keep internal deploy/GTM playbook out of public tree",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-22T15:16:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5691306090b68d093aece6a97752673d618bb223",
"body": "… gates\n\nBumps 0.11.4 -> 0.12.0 and documents this wave: recompute-and-gate conservation\nat certify, deterministic perturbation-replay gate, deterministic deck\nnumeric-grounding gate, and the OraCert LLM-free verifier. Prepares the PyPI\npublish. No payment/pricing change; new gates are opt-in (default path unchanged).",
"is_bot": false,
"headline": "chore(release): modelforge-finance 0.12.0 — certificate & determinism…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-22T13:42:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "23ce7ff76895c9082393e23b24299146c54c4041",
"body": "…pt-in)\n\nThe baseline conservation gate recomputes the QC sheet only at the built\nnumbers, so a 'total' hardcoded to its baseline value still passes\nTotal == Sum-of-parts and certifies clean — a latent input-dependent defect.\n\nThis gate compiles the workbook once with the formulas engine, resolves t\n[…]\n the project-finance\n'debt amortized' one-sided check that a single-direction shock wrongly tripped);\nfalsifier (hardcoded total) caught two-sided. Deterministic, zero-LLM, opt-in.\nSuite 1535 -> 1540.",
"is_bot": false,
"headline": "feat(qc): perturbation-replay conservation gate (certify --perturb, o…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-22T12:40:34Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ac13357c9d8b42ab5ef605d397cbfad32ff58ca4",
"body": "…LM-free)\n\nThe ModelForge half of OraCert: one standalone, LLM-free verifier for the\nshared oracert.dev/redrivable-result/v1 in-toto predicate, re-establishing\nresult CORRECTNESS (not just byte identity) across two heterogeneous producers.\n\n- oracert/canonical.py: content-hash kernel byte-identical \n[…]\nl (a real solver-produced statement + edge-case hash\nvectors). Falsifiers: tampered solution/hash and an authentic-bytes-but-\nwiring-defective workbook are both rejected. 15 tests; suite 1520 -> 1535.",
"is_bot": false,
"headline": "feat(oracert): cross-server re-derivable-result verifier (in-toto + L…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-22T10:57:05Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c2593b0b373424b7e661aaf16000a408eac44dba",
"body": "Reconcile every rendered token on a composed deck back to a recomputed\ncertified-workbook fact OR a centrally-declared whitelisted derivation\n(leverage = debt/EBITDA, LTV, loan-to-cost, percent-of-total, capital-stack\nsum/shares). An unreconciled token — e.g. a millions-vs-thousands scale error\nthe \n[…]\ncross sponsor_lbo/real_estate/\ndevelopment_re ic_memo+teaser on real certified decks; falsifier proves a\nx1000 scale bug is caught. Default off — shipped certified path unchanged.\n\nSuite 1503 -> 1520.",
"is_bot": false,
"headline": "feat(deck): deterministic numeric-grounding gate (opt-in, fail-closed)",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-22T10:36:24Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2cbd53708800033a00bbcfcb5da9763b08c3f32a",
"body": "…==1 at certify\n\ncertify proves a workbook has zero formula errors, but a conservation check that\nlegitimately recomputes to 0 (a balance sheet that doesn't balance, a debt\nroll-forward that telescopes, NI != EBT + tax) is a VALID formula returning 0 —\nnot an Excel error — so the model certifies CER\n[…]\n (documented; opt-in).\n\nTests: tests/test_conservation_audit.py (3) — clean PASS, certify-blind failing\ncheck (plain certify exit 0, --conservation exit 1), no-QC INDETERMINATE. Full\nsuite 1503 green.",
"is_bot": false,
"headline": "feat(qc): conservation gate — recompute QC sheet and require ALL_PASS…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-22T09:23:48Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "711e676cd9930f44f77ce3eb51a0ec15fb79dab7",
"body": "The gallery table showed only the older/simpler templates; the advanced\ncredit/banking/securitization set — the actual differentiators — were hidden\nbehind the \"full list\" pointer. Add accurate rows for sponsor_lbo, bank_fig,\ndevelopment_re, and loan_tape_securitization, with sheet lists verified from\nthe built workbooks (development_re correctly shown without MC/sensitivity,\nwhich it does not ship).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(templates): surface the frontier templates in the gallery",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-18T02:56:15Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "e0d1a8b68db5ed813fd03393accd45fe85f1023b",
"body": "Wires the schedule auditor (interior hardcodes + roll-forward period drift)\ninto certify as an opt-in gate. `certify --schedule` runs audit_schedule after\nthe formula-error audit and exits non-zero on any finding — turning a CERTIFIED\nbadge into \"zero formula errors AND no certify-blind schedule def\n[…]\ntify (the defect is certify-blind) but FAILS `certify --schedule`.\n\nTests: tests/test_certify_schedule.py (2). Suite 1498 -> 1500.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(cli): opt-in `certify --schedule` gate for the schedule auditor",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-18T02:06:28Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e6be87b4cea9007c26144b768450f82d96bb22ec",
"body": "Extends modelforge.qc.audit_schedule with a second certify-blind check: an\nopening row whose period-t cell references its paired closing row at the WRONG\nprior period column (roll-forward period drift). This is the exact class behind\na real past bug where an inserted row shifted the closing referenc\n[…]\n a wrong-period reference injected into a real built model.\n\nTests: +5 (4 synthetic + 1 real-model injection). Suite 1493 -> 1498.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(qc): ScheduleAudit increment 2 — roll-forward period-drift detector",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-18T01:25:59Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "79416709bcc2d2eae5609920afcb39f9bf92c08c",
"body": "certify proves a workbook has zero formula errors but cannot detect a cell that\nSHOULD be a formula and was overwritten with a bare number (e.g. a value typed\nover year 4 of a 10-year debt schedule). New modelforge.qc.audit_schedule flags\nexactly that: a non-innocuous hardcode wedged BETWEEN formula\n[…]\n mutates the workbook.\n\nTests: tests/test_schedule_audit.py (7) — synthetic edge cases + real-model\ninjection. Suite 1486 -> 1493.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(qc): schedule auditor — flag interior hardcodes certify can't see",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-18T00:38:55Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5f42ee31a7f48c3ef921ba35fb6453956357d143",
"body": "…ped reality\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: correct template count (11→19) and provider count to match ship…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-17T19:11:23Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "70a809c2822615aabd897d10867bcc9e4a18029f",
"body": "… certification moat\n\nBadge/header/list/server.json now state 19 templates (17 shipped + 2 preview); add development_re, bank_fig, loan_tape_securitization to the README list. The quickstart's first command pointed at examples/ (not shipped in the wheel) and failed for pip-install users -> repoint t\n[…]\nmoat (fail-closed via certify --strict / build --trust-strict) for the agent/embed use case; drop the stale 14/14 audit-all count.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: correct template count to 19, fix broken quickstart, foreground…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-17T11:19:33Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4301628390a7e092ae5a8032f2a09f4b9df57bac",
"body": "- README/landing Tests badge 679->1486 (accurate); landing de-numbered to a CI-green claim to prevent recurrence\n\n- landing: v0.9->v0.11; drop uncited third-party ranking claim; fix two dead SCORECARD links\n\n- docs: correct pip package name modelforge->modelforge-finance at 5 install sites (real PyP\n[…]\nngling private-SCORECARD reference\n\n- add .github/FUNDING.yml (GitHub Sponsors)\n\nVerified: 1486 tests pass; no code paths touched.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: scrub stale/false public claims + add funding surface",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-17T00:23:47Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b8f351841fb080d93fb28494692533ad6c16a1dc",
"body": "The synthetic-example safety test hardcoded the real-world identifiers it\nguards against, which published those exact strings in the public test\nsource. Replace the inline list with a gitignored tests/_leak_denylist.txt\n(or MODELFORGE_LEAK_DENYLIST env var) + positive synthetic-identifier\nassertions, so the guard stays strong locally/CI without leaking the terms.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(security): move synthetic-example denylist out of public source",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-16T23:06:31Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "752c57c20289f6f3a09d1c59f02e546e0efba714",
"body": "Two platform-dependent nondeterminism sources broke the byte-identical\nrebuild guarantee on CI (Linux) while passing on Windows:\n\n1. text_measurer resolved fonts via unsorted Path.rglob()[0]; scandir\n order is filesystem-arbitrary on Linux, so consecutive builds could\n pick a different fallback \n[…]\nMU conversion.\n\nVerified on Linux: 28/28 builds -> a single identical hash (was 3 hashes,\n~30% flaky); full deck suite 686 passed.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(deck): make .pptx layout byte-deterministic on Linux",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-16T22:26:07Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "83ffc9eae9aec20a3adf2fd4c57e156071edc19d",
"body": "The deck layout engine imports kiwisolver/Pillow unconditionally, but the\nCI install omitted the 'deck' extra, so pytest failed at collection with\nModuleNotFoundError across 8 deck test modules (exit 2) since the\nmodelforge.deck merge. Passes locally only because the dev venv has them.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "ci: add deck extra to test install so kiwisolver/Pillow are present",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-16T21:44:39Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "4987d0ab1ed48e7d696d3b180fe5d9bb90b71b20",
"body": "…ate 19\n\nAdds a cash-securitization template driven by a granular, stratified loan tape —\nthe engine the existing structured-credit family deliberately lacks. structured_credit\nstays static cumulative-loss tranching; npl stays a single-curve collection waterfall;\nthis EXTENDS them with the missing m\n[…]\nC checks replaced with checks that have teeth,\na negative-coupon floor, a sequential turbo across notes, and a reserve priority-of-payments fix.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(templates): add loan-tape cash securitization (CLO/RMBS) — Templ…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-15T15:20:15Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "035ac6d1f1324a5dba6e759142ebaf85d2eb759b",
"body": "…ated capital return\n\nA single-entity bank / financial-institution model (Basel III/IV + EU CRR proxy\nfidelity) — the \"certified bank capital model\" frontier-gap cell no wrapper\noccupies. Mirrors the three_statement single-entity shape (no deal/waterfall\nspine) and uses the generic_qc QC sheet.\n\nShe\n[…]\n.py (clean-room\nparity 81/81, fully independent Python re-derivation). Full suite 1469/0,\nexample CERTIFIED (errors=0, gaps=0), QC ALL_PASS = 1.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(bank_fig): add Bank / FIG template (#18) — NII, RWA, CET1, MDA-g…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-15T12:16:14Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "fdcfd10d205ef193d7433a4812bb61d51aeca882",
"body": "…-one\n\nThe per-tranche \"Opening debt\" roll-forward baked a literal cursor offset (r+3)\ninto the opening formula. Normally opening->drawdown->repayment->closing makes\nr+3 == closing (correct), but a mandatory_1pct tranche inserts an extra\n\"Mandatory amortization rate\" input row between drawdown and r\n[…]\nening rolls from\nclosing, not repayment, across mandatory_1pct/bullet/linear.\n\nSuite 1456/1456, 19/19 examples CERTIFIED, 16/16 hardtests green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(debt): correct mandatory_1pct opening-balance roll-forward off-by…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-15T10:57:32Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1b871eb1e02a649df5ad25b19865190145f8a4ca",
"body": "…een CLI, RE decks\n\nRoadmap item 6. Adds the development-phase real-estate capability the\nstabilized-asset real_estate template could not express, wires portfolio\nscreening to a CLI, and extends the certified-deck adapter to real estate.\n\ndevelopment_re template (17th in REGISTRY):\n- New Development\n[…]\n383 -> 1452 passed / 0 failed. All 21 examples CERTIFIED. Exposure\ngrep clean (only the negative-assertion guard test references the deny-list).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(development_re+screen+deck): ground-up development template, scr…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-15T10:07:53Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3ae43f98cb59207b96f72705eaff6b8b94eebfe9",
"body": "…urface\n\nRoadmap items 2+3. New modelforge.deck package (extracted from the\nDeckForge project, imports rewritten, all SaaS/billing/llm/gslides/plotly\nsurfaces left behind):\n\n- ir/ themes/ layout/ rendering/ compose/ qa/ finance/ (~90 files + 15 themes)\n- Native deterministic IB charts (no Plotly/PNG\n[…]\nde-content gate: every slide >= 2 content shapes across 4 decks, zero\nskip warnings. exporters/pptx.py deprecated in favor of the deck pipeline.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(deck+mcp): certified committee-deck layer + conversational MCP s…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-12T21:04:15Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c2acc359ab048d20e0ba5e573f0dd4db4ea5967c",
"body": "…frontier-agent baseline\n\nHarness: 3 frozen synthetic briefs (LBO/DCF/3-statement), clean-room ground\ntruth (numpy_financial, zero modelforge imports), deterministic scorer with\n6 pre-registered metrics (formula errors via third-party recalc, headline\naccuracy, hardcode rate, reproducibility, lineag\n[…]\ndentity, 3S framing). This commit is the\ntamper-evidence anchor for the harness. Adversarially verified by independent\nre-scoring before commit.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(benchmarks): pre-registered public benchmark v1 - ModelForge vs …",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-12T15:51:30Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "de5a8ba32eeeede8401012c2de838ac9a0de2c97",
"body": "…to the corrected models\n\nThe model corrections shifted layouts / changed clean-room expectations, which the\npytest suite doesn't cover (these are standalone live-Excel harnesses):\n- three_statement: the new CFF 'Debt repayment' row shifted cff/net_change down\n one — update the ROW map (cff 40->41,\n[…]\nty IRR 18.34% / MoIC 2.52x now reconcile to\n numpy_financial on the live CF.\n\nAll 15 hardtests now pass (exit 0) without PYTHONIOENCODING set.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(hardtest): realign npl/portfolio_review/three_statement harness …",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-12T07:38:53Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e29ef07f5a7894f29138fedbeb8dd96ff95251bc",
"body": "…cross the suite\n\nPYTHONIOENCODING is read only at interpreter startup and ignored by the running\nprocess, so on the default Windows cp1252 console hardtests that print Greek/math\nglyphs (U+0394 Δ, U+00D7 ×, U+03A3 Σ) crashed: hardtest_project_finance.py\nsilently SKIPPED 12 of its 15 financial-invar\n[…]\negardless of console codepage. Verified: project_finance now 15/15, hgb_carveout\nexits 0 — both run to completion without PYTHONIOENCODING set.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(hardtest): standardize effective in-process UTF-8 console guard a…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-12T07:27:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f9da9f13860e8287ed8ad6075723aaa0aae37b49",
"body": "…ypo + dangling-source guards, honest compliance/schema/scaffold\n\n- build/certify/monte-carlo no longer dump a raw Python traceback on a malformed\n or incomplete spec: a shared _load_and_validate_spec() gives the same friendly\n plain-language errors `validate` does (YAML parse, non-mapping, unknow\n[…]\ncturing` now prints a note that the stub needs fields\n filled before it validates/builds.\n\nSuite 691/691; affected examples certify CERTIFIED.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(cli,spec): professional-grade validation UX — friendly errors, t…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-12T07:25:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ea27cb77990d4686fa89127f51c5aa6bdee4314d",
"body": "…e counts, MC deltas, football field\n\nCells now render with formats that match their MEANING:\n- risk_sheet: Merton/KMV distance-to-default and d1/d2 are z-scores -> plain\n 2dp number (was \"3.94x\"); 'Horizon (years)'=1 -> \"1.0 y\" (was \"100.00%\").\n- sources_uses: fully-diluted share COUNT -> accounti\n[…]\ns both anchored at zero.\n\nSuite 691/691; all 20 examples certify CERTIFIED; determinism preserved (all\nchanges are build-time, clock/RNG-free).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(format): 6 number-format/chart semantics defects — z-scores, shar…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-12T07:12:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "dff32670a58e9b6a0c15b4c8d8fbd399ff88ed7c",
"body": "…E waterfalls, fund pref, 3-statement debt, DCF guard\n\n- covenants: 'Total Net Leverage' covenant is computed GROSS (no cash netting),\n so relabel to 'Total Gross Leverage' in the 4 affected examples (the row label\n already read 'Leverage (Debt / EBITDA)'). Honest label = matches the math.\n- npl: \n[…]\n also\n guarantees g < WACC). Rejects g>=rf with a clear message; Enel (1.5%<3.9%) ok.\n\nSuite 691/691; all affected examples certify CERTIFIED.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(models): 7 P2 correctness/honesty defects — leverage label, NPL/R…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-12T06:59:48Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4faf7d404f465f0b8063f40bfd78963d431f92ae",
"body": "… NPL subordination, shadow merger, fund net IRR\n\n- structured_credit: Principal Deficiency Ledger summed the t=0 column (all\n loss% = 0) and added bare percentages, so it always read 0 even when junior/\n equity were written down. Now sums final-period cumulative loss x tranche size\n in EUR m (FM\n[…]\n fee\n periods 1..N, carry at terminal). portfolio_review_us net IRR 32.1% <= gross.\n\nSuite 691/691; all 5 affected examples certify CERTIFIED.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(models): 5 P1 correctness defects — PDL, covenant entry leverage,…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-12T06:46:23Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "33ca9231a7a6cf3a1d7012e13bc36d2532078d11",
"body": "…st-maturity year\n\nTwo P0 wrong-number defects a buyer would act on directly:\n\n1. Sponsor-LBO exit IRR/MoIC used Enterprise Value as the sponsor's exit\n inflow, never repaying the ~EUR35m of tranche debt outstanding at exit.\n Exit proceeds (and the dividend recap, and the hurdle reverse-solve) n\n[…]\nec each run (was reading a stale pre-built file). 22/22 checks pass.\n\nSuite 691/691; credit_memo + both LBO examples certify CERTIFIED via CLI.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(lbo,credit): exit returns = equity not EV; credit recovery off po…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-12T06:33:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "892972ec98eba6cf1aba7511d3b9dc6fc9d568b7",
"body": "…nistic, manifest-valid workbook\n\nThe `build` command injected the Trust-Layer RedFlags and MOAT sheets AFTER\nbuild_model()'s styler + determinism-pin + manifest-hash, so the *delivered*\nworkbook (the default CLI path a user actually ships) had:\n - 39-45 unstyled cells in MOAT/RedFlags -> certify W\n[…]\nbuild of credit_memo_cdmo -> CERTIFIED errors=0 style-gaps=0,\nbyte-identical across two builds, manifest hash == delivered file. Suite 691/691.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(build): make CLI 'build'/'certify' deliver a certifiable, determi…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-12T06:19:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "690824b075049a6d016b7d84733a22fcf14787af",
"body": "…errors, 0 style-gaps)\n\nFinal professional-polish pass. Suite 691/691; every shipped example now certifies\nCERTIFIED (zero formula errors AND zero styling gaps), up from WARN.\n\n- styles.auto_style_gaps(wb): deterministic post-build pass that gives every value-bearing\n cell an explicit font + number\n[…]\nere FMT_MULTIPLE -> FMT_INTEGER; dcf_enel + fairness_amplifon share-count\n assumptions had unit: x -> count (a share count is not a multiple).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(polish): post-build auto-styler -> all 18 examples CERTIFIED (0 …",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-11T23:44:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a28a57feca87a780d7aa9158b536ecb7f5a6d75c",
"body": "…rametric band\n\nUpgrade analytics from build-time static snapshots to scenario-reactive where Excel permits,\nhonest where it cannot. Suite 691/691; all 18 examples certify errors=0.\n\n- sensitivity: tornado Low/High deltas + the generic 2D data-table body now render as LIVE\n Excel elasticity formula\n[…]\nan editable mc_vol cell (proven live on scenario\n flip AND vol edit). Added a `modelforge monte-carlo` refresh command for an exact re-sample.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(analytics): make tornado/2D genuinely live + Monte Carlo live pa…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-11T23:09:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "bdb73ec92f6ff5ac25e3b25da9ce432163c7854a",
"body": "…e-out bridge, true DSCR sculpting\n\nEach was an honest gap; now a validated feature. Suite 689/689 (+9 finance_core tests); all\nexamples certify errors=0; each hardtest's gap-marker flipped into a real reconciliation vs\nindependent ground truth (numpy_financial / clean-room / model-independent ident\n[…]\nardtest CHECK E flipped\n to validate flat DSCR; 15/15.\n\nRemoved the now-obsolete \"v0.12 roadmap / NOT shipped\" placeholder notes for all four.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(models): ship 4 missing capabilities — duration, fund KPIs, carv…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-11T22:40:22Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "88820d7ab98839e024ebe5d45fab8eca2a9bcf07",
"body": "…iven inputs\n\nEvery deal-critical constant that was baked into a builder formula is now an OPTIONAL\nspec field surfaced as a visible, overridable named-input cell (default = prior value, so\nbehaviour is byte-identical when omitted). Full suite 680/680; all 14 examples certify\nerrors=0; every hardtes\n[…]\n spec field; other 12 templates still read getattr defaults — trivial follow-up)\n- gitignore: ignore _o_*.xlsx / _out_*.xlsx / output_* scratch\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(spec): parameterize hardcoded assumptions into auditable spec-dr…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-11T21:39:35Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f803020ca3b80b286986aefba6b7e5057f208593",
"body": "…-honesty + 3 new defects\n\nAudit-driven hardening toward best-in-class UX for finance professionals. Full suite 680/680;\neach change gated by build + targeted hardtests/tests. Local only.\n\nNew defects fixed (found by the deep audit + the new certify gate):\n- mcp_server: build_model tool self-recurse\n[…]\n`schema`, `scaffold`,\n and `certify` (zero-formula-error gate via new modelforge/qc/workbook_audit.py); new spec/errors.py + spec/scaffold.py.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(ux+fix): professional-UX pass — MCP/CLI/determinism/QC/analytics…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-11T08:57:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9e4186795f9176cfe0fbec0f991d1bc60d3b9c8a",
"body": "…ep + add validation scripts\n\nIndependent-ground-truth hard tests across all 14 shipped model types found and this\ncommit fixes 12 correctness/integrity defects (1 — true PF DSCR-sculpting — deferred and\nhonestly relabeled rather than faked). Full suite 680/680; each fix gated by its hard test.\n\n- c\n[…]\nunded\n balance (lender IRR 7.89% -> 9.73%)\n- add 13 hardtest_*.py validation scripts (live-Excel vs numpy_financial + clean-room + invariants)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(models): harden 12 finance defects found by 14-deal hard-test swe…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-11T07:26:28Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "44273b7b2246435afe96cbcf67296b3fa22eba17",
"body": "…om + loss conservation\n\nBuilds the 4-tranche IT SME securitization, EVALUATES the live Excel waterfall\n(formulas engine), reconciles every tranche size/loss%/outstanding/coupon to a\nclean-room reference, and asserts the model-independent LOSS CONSERVATION identity\n(Sigma tranche loss = pool loss) +\n[…]\n loss, whole-stack breach). 199/199 pass; senior takes exactly\n(20-10)/(100-10)=11.11% under stress. Self-contained (auto-builds its workbooks).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(structured-credit): hard waterfall test — live Excel vs clean-ro…",
"author_name": "ModelForge Dev",
"author_login": "claude",
"committed_at": "2026-06-10T22:43:03Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5c58691741fd5ecada0018fefb8741692417a8f5",
"body": "…nal ground-truth hardtest\n\nFound by hardtest_external_groundtruth.py (vs numpy_financial + clean-room DCF/LBO):\nirr() rejected the canonical PE/LBO stream [-equity,0,0,0,0,exit] because the\nsign-change guard checked adjacent pairs only — intervening zeros defeated it.\nFix: require >=1 positive AND >=1 negative cashflow (the correct IRR precondition).\nHardtest: 40/40 vs independent ground truth; DCF EV + LBO MOIC/IRR reconcile to 1e-9.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(finance_core): irr accepts sign-change separated by zeros + exter…",
"author_name": "ModelForge Dev",
"author_login": "claude",
"committed_at": "2026-06-10T22:36:47Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "0007fdce9099a0b903150d4fbf05fecd5e0c5d41",
"body": "… count claims, stale tool header, list_sources/lineage_walk runtime bugs; add What-this-solves + llms.txt + GEO post\n\n- Replace all 17 tool docstrings with Use-when problem-framed descriptions\n- Regenerate module-level header to list actual 17 registered tools; remove phantom sensitivity_run\n- Fix \n[…]\no reflect 16 templates\n- Add 8 GitHub topics: mcp-server, dcf, lbo, audit-trail, data-lineage, yaml-to-excel, valuation, ai-agents\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(discovery): problem-framed MCP tool docstrings + fix QC/template…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-03T15:16:36Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "04c2d51bc99bad7093e2c55de7bce2d128142c70",
"body": "…adges/CI\n\n- CHANGELOG: drop 'Strategic context' block (named non-compete evasion +\n US/UK/EU/DACH/Nordic FI segments) and GTM-motion intro; neutral rewrite\n- Remove internal V06/V07_SHIPPED.md release notes (V07 named London/Zurich/\n Frankfurt funds, UK pension, Swiss bank, DACH family office as \n[…]\nadge -> dynamic PyPI badge (was stale; PyPI 0.11.4)\n- deploy.yml: bump collab-worker Node 20 -> 22 (wrangler 4 floor; was failing)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: remove non-compete/FI-targeting copy from public surface + fix b…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-03T14:12:32Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f484c9e08d3581e9863ac615c59e52336a16dd94",
"body": "Adds a structured \"Early Access / Commercial Inquiry\" issue form and a\nREADME CTA so production users / commercial interest have a clear,\nlow-friction intake path (previously there was no call-to-action or\ncapture anywhere). In-platform, no PII exposure.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: add lead-capture CTA + Early Access issue template",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-03T13:09:11Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a78b4dee9ae54701f844104ad841aac01c0392db",
"body": "Prevents the worker's install artifacts from being accidentally staged\ninto the repo.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(collab-worker): gitignore node_modules/dist/.wrangler",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-03T12:37:11Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "54dc61f28dff8fe294821b66b41a71333a49c635",
"body": "…ories\n\ncollab-worker `npm audit` now 0 vulnerabilities (was 1 critical / 1 high\n/ 7 moderate). All advisories were in the dev/build toolchain (vitest\ntest runner + wrangler's bundled undici/miniflare/esbuild/ws) -- the\ndeployed Worker runtime deps (yjs, y-protocols, lib0) had no advisories,\nso the \n[…]\n (wrangler.toml + CollabDoc Durable Object binding valid, worker\nbundles). No test files exist, so the vitest major is inert here.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(collab-worker): bump wrangler 3->4 + vitest 2->4 to clear advis…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-03T12:36:40Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "46409d0f9892764964cfa9df7d9c4b043bd36169",
"body": "…sh), self-contained MC test\n\n- __version__ 0.9.7 -> 0.11.4 (was out of sync with pyproject)\n- Force UTF-8 on CLI stdout/stderr so 'modelforge --help' no longer raises UnicodeEncodeError on Windows cp1252 (the help lists a command whose docstring contains 'χ²')\n- test_mc_sheet_on_all_templates now builds each example into tmp_path instead of reading gitignored prebuilt output/*.xlsx -> 679/679 from a clean checkout\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: sync __version__ to 0.11.4, UTF-8 CLI output (Windows --help cra…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-03T09:57:46Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a4492837fbabb8d3f04a4ca62d9622c5ff1fd2c8",
"body": "Resolves the 'Proprietary license claimed but no LICENSE file' contradiction; version bump for clean PyPI re-publish with scrubbed README.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: add proprietary source-available LICENSE; bump 0.11.2 -> 0.11.3",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-03T09:03:01Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "08d65ad9cfa4749252e9de829944b1112cbc62b0",
"body": "…e internal strategy doc\n\n- Reframe README + landing to developer/analyst audience (drop 'private capital teams / UK-EU credit / NPL / DACH-Nordic' targeting)\n- Remove bespoke '€15-100K per deal' + 'bank-grade engagements' solicitation\n- Drop Italian-niche market-targeting framing from landing + com\n[…]\nes shipped count); align landing test count to 679\n- Remove research/arc_threat_profile.md (internal GTM strategy, not for public)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: scrub FI-targeting/solicitation copy; fix template badge; remov…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-03T07:51:56Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "619b3302cef01005028997f2c3ef34bbb205903e",
"body": "- Route security reports + contact to GitHub (advisories/issues), not personal email\n- Anonymize analyst + counterparty names in example specs to generic placeholders\n- Remove internal strategy outline from the public tree; genericize/rename ROI example\n- Drop personal name, location and social links from landing page + web footer\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(privacy): scrub maintainer PII + anonymize example/deal data",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-06-01T14:04:12Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "094991cc28eb01542d7e260049ae21e60f1bdb4c",
"body": "…ver get committed\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: gitignore build artifacts (dist/, dist-*/) so wheels/sdists ne…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-29T12:19:14Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "778d5eb250d0eab3593866f9f663924a28860cd0",
"body": "…ersarial findings) to private repo\n\nMoves to Whatsonyourmind/modelforge-private:\n- All SCORECARD*.md (consensus + v1/v2/v3 historical)\n- IC_DOSSIER + EXTERNAL_IC_REVIEW + TRIPLE_REVIEW (investment-committee briefings)\n- GTM_STRATEGY + MOAT_SWEEP + GAP_ANALYSIS_TO_9 (commercial positioning)\n- All 9 \n[…]\nupdated: drops scorecard badge + IC-review paragraph + PRD link.\n.gitignore extended so these patterns don't reappear by accident.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: move internal docs (scorecard, internal review, PRDs, GTM, adv…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-28T12:55:22Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f21537e94b27652d25538a12cc6a375c09140a18",
"body": "Adds the Glama maintainer-claim file so when the modelforge MCP server is\nindexed at glama.ai/mcp/servers/Whatsonyourmind/modelforge the ownership\nattribution is correct. Unblocks the missing-glama label on the\npunkpeye/awesome-mcp-servers PR.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: add glama.json — claim listing for Glama MCP registry",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-27T23:18:57Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "07c151d2eda20af0e5b06aa12743457d9325fb57",
"body": "Continues v0.11.1. Sweeps 14 hardcoded EN/IT pairs from the most common\nsheet builders (Cover, Operating, Covenants, Debt, Returns) into the\nLabel class. Sponsor LBO and unitranche workbooks now render correctly\nacross all 8 languages on the common path.\n\nAdded 14 new labels (105 → 119 total):\n* cov\n[…]\ncoded pairs in specialized template sheets (NPL, PF,\nRE, merger, DCF, bond structure, structured credit, etc.) remain v0.12\nscope.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(v0.11.2): common-sheet multi-language sweep",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-18T23:26:22Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0d38d258ecbf7456944f641e46d8b1ba5e667463",
"body": "…UK example\n\n679/679 tests passing. Architectural cleanup of the v0.10/11 global-mutation\nshim. Multi-tenant safe: concurrent builds in different secondary languages\nno longer bleed.\n\nRenderer refactor (proper):\n* Added `Label.secondary` property that reads a contextvars.ContextVar and\n returns the\n[…]\necard: 5.46 (v0.9.7 baseline) → ~5.75 (post-v0.11.1).\n\nVersion 0.11.0 → 0.11.1. CHANGELOG entry. PyPI publish remains user-action.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(v0.11.1): contextvar rendering + full multi-language ts_model + …",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-18T23:20:53Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "64877b86b939de8fecf16ffb74df90ff5ad3e8d5",
"body": "…lian cleanup\n\nCloses the v0.10 PREVIEW/BETA gaps and pushes product quality toward the\nSCORECARD round-3 target. Ships in the same session as v0.10. 667/667 tests\npassing (657 baseline + 10 new).\n\nTrust Layer expansion (+6 rules, total 30+):\n* hgb_hebesatz_in_band — GewSt Hebesatz must be in legal \n[…]\nering all of\nthe above. Full suite 657 → 667 passing.\n\nVersion 0.10.0 → 0.11.0. CHANGELOG entry. PyPI publish remains user-action.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(v0.11): quality lift — Trust+ + HGB BETA + foreign example + Ita…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-18T18:36:32Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e1a82c0055855deccc5a3d5776473ae095e70dd9",
"body": "PRD: PRD_v010_foreign_markets.md\n\nDrivers: six persona interviews across the W1 30-firm outreach list\n(US MM direct lending, US distressed, UK/EU credit, DACH turnaround,\nNordic MM, Benelux family PE) plus a non-compete-driven requirement to\nstrip Italian-market positioning from public surface.\n\nCha\n[…]\nst_v010_foreign_markets.py — all pass.\n Existing suite 637/637 → 657/657.\n* Version 0.9.7 → 0.10.0.\n* CHANGELOG.md initial entry.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(v0.10): foreign-market expansion — kill Italian-only positioning",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-18T08:42:28Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e65b84fdd91cdfebf6f311ce8cb08935ef9519f4",
"body": "…bjects\n\nCloudflare free plan requires SQLite-backed Durable Objects (cheaper compute).\nStandard new_classes migration fails with code 10097 on free accounts.",
"is_bot": false,
"headline": "fix(collab-worker): use new_sqlite_classes for CF free-plan Durable O…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-18T01:23:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "67e5bcfc248dd55b9c83e342b676dd3d5c31b3e8",
"body": "GitHub Actions setup-node was failing to find the lock file at the configured\ncache-dependency-path. Generated via npm install --package-lock-only.",
"is_bot": false,
"headline": "build(collab-worker): commit package-lock.json so CI npm cache resolves",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-18T01:22:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1a781e4e36306cf3fb0b15e30e14b3b7d0a11ba8",
"body": "Validates end-to-end automation: Render deploy hook + Cloudflare Worker.\nSecrets: RENDER_DEPLOY_HOOK_URL, CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID,\nSUPABASE_JWT_SECRET are all set.",
"is_bot": false,
"headline": "deploy: kick off first full SaaS deploy via GitHub Actions",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-18T01:21:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5d005d23863f81321053def6dce1ef69e0c4eaf8",
"body": "…pport cron)\n\nRender's free plan is web-only. The daily audit-listed harness can run via\nGitHub Actions scheduled workflow at zero cost. Re-add to render.yaml under\n'plan: starter' ($7/mo) when colocation becomes valuable.",
"is_bot": false,
"headline": "fix(deploy): drop cron service from render.yaml (free tier doesn't su…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-18T00:39:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e4903ede8a17cfad72ebe91c24aee239922bd6be",
"body": "…Version field\n\nRender's blueprint schema doesn't accept pythonVersion as a top-level service\nfield. Move to envVars per Render's documented runtime selection mechanism.",
"is_bot": false,
"headline": "fix(deploy): use PYTHON_VERSION env var instead of unsupported python…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-18T00:38:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "73d1492127b2f8fe5fb0f459ca7a2eac9b5b1911",
"body": "- .gitignore: add output/ + *.manifest.json (build artifacts shouldn't track)\n- AUDIT_RUN_LISTED.md/.json: refresh with latest 30-ticker LIVE Yahoo run\n- .continue-here.md: full session handoff\n - 13 commits this 3-day session (May 14-17)\n - Tests 471 -> 631 (+160)\n - Score round-1 5.45 -> round-\n[…]\nwork for round)\n- Re-run triple-AI review without ≥1 LOI landing (verdict won't move)\n- Touch the license (user-deferred decision)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: save session — gitignore output/ + handoff for next session",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-17T15:25:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4ea6d65cd9835f1dd5646863cd3c50723a11846b",
"body": "…ybook\n\nThe \"deploy the SaaS shell\" execution from the round-4 internal review's\nunanimous next-action recommendation. Three pieces:\n\n1. modelforge/web/saas_routes.py + create_app() integration:\n - 11 new /api/v1/* routes (auth/whoami, tenants CRUD + members,\n billing webhook with HMAC verific\n[…]\n, ingest your real\nteaser, tell me where the output is wrong.' That's the customer-pull\nmove all three reviewers are waiting for.\"\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(d5-deploy): SaaS shell wired into FastAPI + auto-deploy CI + pla…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-16T02:32:47Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ee65e4b26bea1822895024ad92e4faa8b0715d6d",
"body": "D3 — fixed all remaining template moat-gate failures:\n- merger_proforma.py: PPA named ranges (asset_writeup_ppe,\n intangibles_*, target_bv_equity) now wired into DTL + goodwill +\n amortization formulas. Cell values are formulas pointing to the\n Assumptions-sheet `_eur_m` named ranges (single sour\n[…]\n.\n\nQuality-only weighted lift: ~7.79 → ~7.95 (within 0.05 of 8.0;\nonly SOC2 spend gap remains for D7 to bridge the last 5 points).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(d3+d8): 14/14 moat-clean + 17 country defaults",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-15T16:14:24Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3aac105316577abd10e82078086b642bc8d8e1d9",
"body": "Closes the D6 dev-only ceiling gap. Phase A free-tier blueprint:\nCloudflare Workers + Durable Objects host one Y.Doc per\n${tenantId}:${docId}. Free-tier capacity covers tens of concurrent\ndesign-partner users (100K req/day, 1M DO req/mo, ~100 concurrent\nWebSocket connections per Worker).\n\nweb/collab\n[…]\n via `wrangler deploy` (one-time login + ~10s\ndeploy). Browser UI (Yjs client) connects to ws_url for realtime\nmulti-user editing.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(d6): Yjs realtime collab — CF Worker + Python client",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-15T15:46:55Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "bcbc2ee36ec527258acea2c6cae731aefcd9ac94",
"body": "D4 — wire 2 more free Providers (LIVE count 4 → 5):\n- FREDProvider (free, no key required) — uses FRED's public CSV\n endpoint (fredgraph.csv); switches to JSON API when FRED_API_KEY set.\n history(series_id) returns macro time series as Bars.\n Live verified: 10Y Treasury 4.46%, SOFR 3.56% (May 202\n[…]\n in pass/fail count, but 4\ntemplates moved from \"fails 2 gates\" to \"fails 1 gate (density)\").\n\nTests: full feeds suite 59/59 pass.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(d4+d3): FRED + AlphaVantage Providers + unitranche fee wiring",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-15T15:42:03Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e1523f22f4ba80dbcd6f2dd563ae1143a75fb6d0",
"body": "modelforge/saas/ — full no-spend SaaS shell that runs on Supabase\nfree tier + Cloudflare Pages free + Stripe transactional. Code is\nexercisable today via dev-bypass headers; flips to verified Supabase\nJWT + tenant RLS once env vars are wired.\n\nThree modules:\n\n1. auth.py — AuthContext + JWT/header ve\n[…]\n.\n\nPhase-A no-spend SaaS-shell GATE met: every code path runs locally\nwith SQLite + dev bypass; production wiring is env-var only.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(d5): SaaS shell — multi-tenant auth + tenant + billing (free tier)",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-15T13:50:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e3b957cc330be206079b51584124a10ac7d346e5",
"body": "modelforge/collab/ — data model + state machine for multi-user\nreview workflows. Realtime sync (Yjs / CF Workers Durable Objects /\nLiveblocks) is the Phase-B integration layer; the data model and\naudit trail ship now, free, no infra.\n\nThree modules:\n\n1. comments.py — CommentStore (SQLite, append-onl\n[…]\nover CF Workers Durable Objects)\nwill mirror these same events; no data-model rework required when\nthe realtime UX layer is added.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(d6): collab primitives — comments + 4-eyes review + workbook diff",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-15T13:46:01Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cdeb41f4af6f1722449199d453c18c4e1f341095",
"body": "Adds modelforge/analytics/manifest.py — every workbook now ships with a\n``<workbook>.manifest.json`` sidecar containing the full audit envelope:\n\n- ``spec_sha256`` bytes-deterministic hash of the YAML spec\n- ``sources_sha256`` digest covering every source-doc row\n- ``source_hashes`` per-sourc\n[…]\nap (D2 → 8.5) without\nrequiring spend on Big-4 audit. Tests: +17 (15 manifest + 2 build_model\nintegration), 547/547 expected pass.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(d2): per-build manifest sidecar with source-doc hash chain",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-15T13:40:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9e3cbc2f6492104f4b2af435b8e82590bd4e34d1",
"body": "D7 — Security / compliance (license deferred per user direction):\n- THREAT_MODEL.md: formal STRIDE catalogue with 23 threats (Spoofing,\n Tampering, Repudiation, Information disclosure, Denial of service,\n Elevation of privilege) + risk-rating summary + verification cadence\n- .github/workflows/secu\n[…]\n 15% for groups ≥ EUR 750M\n- 20 new tests covering rate selection, deductions, loss CF, BEPS\n\nTests: 530/530 (was 510, +20 Swiss).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(d7+d8): security hardening + international expansion",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-15T13:30:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b916142f7d8b256f1ad6eea5f695c7b3da9c6297",
"body": "Adds scripts/moat_sweep.py that builds every example workbook and runs\nall 4 moat gates, emitting MOAT_SWEEP.md as the canonical scoreboard.\n\nCurrent state: 8/14 templates pass all 4 gates. Six fail on the\norphan-named-range or density gates (or both):\n- credit_memo_cdmo (8 orphans, 1 density gap)\n-\n[…]\niewers a consistent way to\nverify \"fully-formulated live Excel\" claim per internal review's\ncritique on the marketing/reality gap.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(d3): MOAT_SWEEP tool — moat-gate scoreboard across 14 templates",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-15T11:28:01Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ebe68f00120e0b6721b3ccf23119e22be9edaf6a",
"body": "Implements the harness internal review demanded as the gate\nto lift D1 from 7.3 to 8.5+:\n\nUniverse: 20 named US listed-cos across 4 sectors\n- Tech: AAPL, MSFT, GOOG, META, NVDA\n- Bank: JPM, BAC, WFC, GS, MS\n- Pharma: PFE, JNJ, MRK, ABBV, LLY\n- Industrial: CAT, BA, GE, HON, UNP\n\nPipeline per ticker:\n\n[…]\n3B vs live market cap 94.9B for ENEL.MI (+482%).\" Killer\n#1 is now objectively closed.\n\nTests: 510/510 still pass (no regression).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(d1): 20-listed-co plausibility harness — closes priority item #1",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-15T11:20:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6470b86d744c79cfa7da1b1b455afbed3291da1f",
"body": "D4 (data integrations) lift — first no-auth Provider with quote +\nhistory + fundamentals globally:\n- YahooProvider class wraps existing helpers + adds Yahoo's quote\n Summary endpoint with cookie/crumb anti-bot dance for fundamentals\n- Registered in default registry as `yahoo` tier=free, no auth\n- L\n[…]\n(priority item)\nis now caught at audit time against live external reference, not\njust internal Trust Layer self-consistency rules.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(d4+d1): YahooProvider LIVE + live market-cap Trust rule",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-15T11:01:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b68cdf1b336945e01f68eb59529db18964b0cf73",
"body": null,
"is_bot": false,
"headline": "ci: materialize example workbooks before tests",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-15T08:55:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a09bdf5b38d28a19ccc5ce7dedbcc520b5d1b6bc",
"body": "Two CI issues found in the first v0.9.7 run:\n 1. test_web.py collection failed on missing fastapi -> add\n [web,ingest] to the test install line so the full test set is\n reachable on CI.\n 2. Ruff surfaced 356 pre-existing issues across the codebase\n (mostly duplicate imports + unused im\n[…]\n feeds adapters).\n Marking lint as advisory (continue-on-error + report-only) so\n it tracks debt without blocking ships until a dedicated cleanup\n pass lands. Tests + SBOM remain blocking.",
"is_bot": false,
"headline": "ci: fix test extras + make ruff advisory",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-15T08:52:26Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9b95d736b8ed33fd6be6d2c65661d56666b12f92",
"body": "Highlights:\n- Trust Layer v1 — semantic plausibility gates across all 14 templates,\n RedFlags sheet auto-injected, audit-all 14/14 FAIL-clean. Closes IC\n review priority item (Enel +743% market-cap deviation now detected at\n build time, was previously silent).\n- Canonical SCORECARD.md at consensu\n[…]\noprietary\n pyproject text. This remains an open procurement gap.\n- Customer-pull (Killer #2) and enterprise wrapper (Killer #3) are\n founder-driven and capital-blocked respectively; not engineering.",
"is_bot": false,
"headline": "release(0.9.7): Trust Layer v1 + honest scorecard + SBOM CI",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-15T08:45:21Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "994e7ccc25a0c3fa2bf293ff7879a7b3c4b8af03",
"body": "CI workflow runs on every push to master and on every PR:\n - test: pytest across Python 3.11 + 3.12 with full extras\n (data, export, mcp, dev) — current suite 504 tests in ~77s\n - lint: ruff check across modelforge/ tests/ scripts/\n - sbom: generates CycloneDX 1.5 SBOM, validates structure,\n \n[…]\n run, so committing creates noisy diffs without\ninformation gain. CI artifact + release attachment are the canonical\ndistribution paths.\n\nCloses IC-review gap \"no SBOM\" for D7 (Security / compliance).",
"is_bot": false,
"headline": "ci: add test/lint/SBOM workflow + ignore generated SBOM",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-15T08:42:10Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "45e5ae04900c30ea8fe6cc841d80c3dcdc9b847b",
"body": "Tier-0 (free): EDGAR · OpenFIGI · GLEIF — LIVE today, validated\nagainst real APIs (full submission-history pulls, FIGI symbol\nresolution, LEI lookups).\n\nTier-1 (low-cost paid): Polygon ($29/mo) · FMP ($19/mo) · Finnhub ·\nTiingo — interface-complete, key-driven activation.\n\nTier-2 (institutional): Bl\n[…]\nokup (cuts hardcoded data 60%).\n\n42 new tests; full suite 504/504.\n\nStrategic posture: Phase B becomes a buy-decision (institutional\nkeys + multi-tenant SaaS), not a build-decision — see SCORECARD.md.",
"is_bot": false,
"headline": "feat(feeds): 11-provider unified data stack",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-15T08:31:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1a33ad37b2d5beb9b8f96d41703c800aa036d9c3",
"body": "Closes internal review KILLER #1 — numerical plausibility failure.\n\nTrust Layer v1 — semantic plausibility gates that catch impossible\nnumbers BEFORE the model leaves QA. Architecture: TrustRule (named\ncheck) -> TrustEngine (runs ruleset against built workbook via\nWorkbookProbe) -> TrustReport (sort\n[…]\ns.\n\nAlso: ipo/restructuring template prompts for ingest pipeline,\nanalytics factor/sensitivity refinement (peer-band aware), CLI\n'modelforge audit' + 'modelforge audit-all' + '--trust-strict' QC\ngate.",
"is_bot": false,
"headline": "feat(trust+moat): Trust Layer v1 + moat classifier",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-15T08:31:37Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "dfe4d514ed19115661d68b840e984fc6abb4bace",
"body": "…creening + OCR\n\nD8 (regional coverage 6.5 -> 8.0, +0.12 weighted):\n- french_corp_tax.py: IS 25% + small-profits 15% + social surcharge 3.3%\n + CVAE + CIR (R&D credit, 30%/5% tiered) + 88% participation exemption\n + €1M loss CF unlimited / 50% above. Smoke: ETR 25.00% on €1M.\n- spanish_corp_tax.py\n[…]\nson: version sync 0.9.6\n\nInternational scorecard: 7.57 -> ~7.84\nPyPI published: pypi.org/project/modelforge-finance/0.9.6/\nMCP registry: io.github.Whatsonyourmind/modelforge v0.9.6 (will publish next)",
"is_bot": false,
"headline": "feat(v0.9.6): Tier-0+Tier-1 autonomous gap-closing — FR/ES/JP tax + s…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-14T14:26:33Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "116448e9510f2a415fbb298efaa7c7ac187513aa",
"body": "…elease\n\nThe unscoped 'modelforge' on PyPI is owned by source{d} (ML library at 0.15.2).\nRenamed our PyPI distribution to 'modelforge-finance' while keeping import\nname 'modelforge' and brand 'ModelForge' everywhere else.\n\nChanges:\n- pyproject.toml: name = \"modelforge-finance\" · version 0.9.4 -> 0.9\n[…]\nv0.9.5 (isLatest)\n- GitHub: public at https://github.com/Whatsonyourmind/modelforge\n\nDistribution channels open. Next session can submit awesome-mcp-* PRs that\npoint to working install commands.",
"is_bot": false,
"headline": "chore(v0.9.5): PyPI rename modelforge -> modelforge-finance + first r…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-14T13:27:48Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "05184ebc7b5b3194473bdcf2f3d9113443e9b034",
"body": "Adds .github/workflows/publish.yml triggered on `git push origin v*`.\n\nThree jobs:\n1. build — builds wheel + sdist\n2. publish-pypi — uploads to PyPI using OIDC (no token stored anywhere)\n3. github-release — attaches wheel + sdist + SBOM (CycloneDX 1.5) to GH release,\n auto-generates release notes \n[…]\nge\n Workflow filename: publish.yml\n Environment name: pypi\n\nAfter that, every `git push origin vX.Y.Z` auto-publishes to PyPI.\n\npyproject: version 0.9.3 -> 0.9.4 (this workflow lives in v0.9.4)",
"is_bot": false,
"headline": "ci(v0.9.4): GitHub Actions PyPI publish via OIDC trusted publishing",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-14T13:06:43Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "266063f456a24f0ec939115f2b9b73f6c70f090d",
"body": "…tion + version sync\n\n- README.md: add `<!-- mcp-name: io.github.Whatsonyourmind/modelforge -->`\n marker required by MCP registry for PyPI-package ownership verification\n- README badges refreshed: v0.9.3 + SOTA 9.40 IT / 7.42 INTL + templates 14 + repo public\n- server.json: description compressed t\n[…]\nip by fetching the PyPI README, so PyPI must be live first). User action:\n`twine upload dist/modelforge-0.9.3-py3-none-any.whl` after PyPI token setup,\nthen `mcp-publisher publish` completes the loop.",
"is_bot": false,
"headline": "chore(v0.9.3): MCP-registry prep — add mcp-name tag + shorten descrip…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-14T12:55:21Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cbdbcba0acb7996120ef411b7efaabbc00915b97",
"body": "D5 (productization) lift: web UI moves from \"functional but plain\" to\n\"presentable to a paying customer.\"\n\nChanges:\n- modelforge/web/app.py: _INDEX_HTML + _VIEW_HTML rewritten with Tailwind CDN\n - Gradient hero header w/ navigation links to GitHub / Scorecard / GTM\n - Upload form with proper file \n[…]\n_) — no endpoint changes needed\n- 13 routes intact, FastAPI app loads clean\n- pyproject: 0.9.2 -> 0.9.3\n\nNet D5 lift: 2.5 -> 5.5 weighted (+0.45 weighted points)\nInternational scorecard: 6.97 -> ~7.42",
"is_bot": false,
"headline": "feat(v0.9.3): Tailwind frontend on web UI — proper SaaS-grade look",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-14T12:53:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "402dfe6e77232b16d4fd16ecf5be296ff2f7b1e8",
"body": "… + comments + SBOM\n\nInternational scorecard lift 6.56 -> ~7.20:\n\nTemplates (D3 modelling completeness +0.225):\n- spec/ipo.py + templates/ipo.py: IPO valuation packet\n - 8 sheets: Cover, Assumptions, Sources, Comps, Precedents, DCF, Valuation, QC\n - Trading-comp median + precedent-transaction medi\n[…]\nd end-to-end: IPO + restructuring builds produce valid .xlsx,\nREGISTRY now 14 templates, comments persist + resolve, SBOM emits valid\nCycloneDX. All 8 modules + scripts/generate_sbom.py compile clean.",
"is_bot": false,
"headline": "feat(v0.9.2): Phase A2 — IPO + restructuring templates + AlphaVantage…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-14T12:46:39Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1aeaed45e54537286618a885f90f39d895561f30",
"body": "…x + free feeds + audit log\n\nInternational dimensions closed (+1.21 weighted lift):\n- D8 +3.0 raw (regional coverage 3.5 -> 6.5): added US GAAP + UK + German tax\n - us_gaap_tax.py: federal 21% + state, NOL 80% rule, R&D credit (regular/ASC),\n GILTI w/ § 250 50% deduction, BEAT @ 12.5%, § 162(m),\n[…]\nus (6.85) and Rogo (7.40)\n Path to 9.0+ documented in SCORECARD_v3 with explicit Step A (autonomous, 3wk)\n + Step B (Phase B capital, €350-600K, 6-12mo)\n\nItalian-niche unchanged (already SOTA): 9.30",
"is_bot": false,
"headline": "feat(v0.9.1): international scorecard lift 5.35 -> 6.56 — regional ta…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-14T12:28:28Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "52069b98cfe9eca00c06a2c5e7b10a98c7311cd5",
"body": "…corecard + landing\n\nDistribution lever:\n- modelforge/mcp_server.py — FastMCP stdio server exposing 8 tools (build_model,\n qc_workbook, list_sources, lineage_walk, list_templates, ingest_dataroom,\n export_pptx, export_docx) for use inside Claude Code/Cursor/Cline/ChatGPT\n- pyproject: add `modelfor\n[…]\n templates (D8)\n\nCloses the autonomous-buildable subset of the international SOTA gap.\nDay-90 KPI targets: 3 paying customers, EUR 30-100K revenue, MCP weekly\ninstalls >=100, public landing page live.",
"is_bot": false,
"headline": "feat(v0.9): GTM prep — MCP server + PPTX/DOCX exporters + dual SOTA s…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-05-14T12:17:03Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "18cdeda9b32da48d5699c3d07dcbc0f76e70d3f7",
"body": "Closes the three classes of non-live surface I flagged in yesterday's\nhonesty pass: (A) hardcoded coefficients -> named ranges, (B) placeholder\nzero-rows -> real formulas, (C) 2D sensitivity linear approx -> shadow-\nengine exact recompute. Audit unchanged at 422/425 PASS. 431 tests pass.\n\nTheme A — \n[…]\ntional[Assumption]\n- PFDebt.early_redemption_flag/year/principal_pct\n- PFDebt.mp_*_flag/mp_*_eur_m (5 event pairs)\n\nAudit: 422/425 PASS, 0 PARTIAL, 0 FAIL (unchanged from v0.8.8).\nTests: 431/431 pass.",
"is_bot": false,
"headline": "feat(v0.8.9 fully-live): closes every last hardcoded/placeholder",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-04-22T06:06:04Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c4fadef1a84d8796977d605f23ae572c3d8c1c68",
"body": "… XIRR\n\nCloses Theme 0.C residuals from v0.8 Theme 4/6: rows that existed as\nstructural placeholders in v0.8 now live-compute with real formulas.\nAudit remains at 422/425 PASS (99.3%), pytest 431/431, zero regressions.\n\nPF cashflow live-compute (US-560..565):\n- O&M reserve balance + funding/release \n[…]\n(target_lev x EBITDA - sponsor_eq\n when recap_enabled=1, recap_year hit)\n- Non-volatile: uses IRR (equal periods) instead of XIRR+TODAY()\n\nAudit #82 regression fix: removed TODAY() volatile function.",
"is_bot": false,
"headline": "feat(v0.8.8 live-compute): PF reserves + IFRS9ECL sheet + sponsor LBO…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-04-22T05:49:12Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3a80131a05557e00f71d7df2484d0da67c0dbc6a",
"body": "…reen\n\nCloses all 53 v0.8.6 PARTIALs + pre-existing merger reverse classifier\nfailure. Gold-standard audit: 369 PASS -> 422 PASS (+53), 86.8% -> 99.3%.\n\nCluster A — Universal 2D Data Tables (US-500/501/502, closes 13):\n- append_generic_2d_tables() in analytics/sensitivity.py\n- Picks top-2 factors by\n[…]\nd_trip_classification failure\n\nBonus — CLI sponsor_lbo registration:\n- cli.py _load_spec_class() was missing sponsor_lbo (v0.8.5 regression)\n\nTests: 431 pass / 0 fail (was 430/1). Audit: 422/425 PASS.",
"is_bot": false,
"headline": "feat(v0.8.7 audit-clean): 0 PARTIAL / 0 FAIL, 99.3% PASS, 431 tests g…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-04-21T23:41:57Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "24d7be9d5c8eec743e07ef92376dbb670b84dc23",
"body": "…rfall\n\nTheme 6 partial — US-260/261 addressed via compliance-sheet enhancement\n(not a new IFRS9ECL live-compute sheet; v1.0 scope). US-262/263 deferred\nto next session.\n\nShips:\n- compliance.py: canonical \"ECL = PD × LGD × EAD × DF\" formula row with\n variable definitions. Individual Stage 1/2/3 row\n[…]\ned score ≥9.0 per PRD ship\ncriteria now met on every category.\n\n430/431 pytest pass (same pre-existing merger reverse classifier).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(v0.8 theme 6 partial + #101): IFRS 9 canonical ECL + SC PDL wate…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-04-21T22:53:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c69e5ad5602350bfc7167a927eda0681367826c5",
"body": "… routing\n\nShips the biggest v0.8 lift. LBO category 14% -> 77% PASS (44 -> 22 checks\nafter routing unitranche/credit_memo out — they are private-credit refi,\nnot sponsor buyouts). Overall audit 323 -> 354 PASS, fails 9 -> 1.\n\nNew files:\n- modelforge/spec/sponsor_lbo.py: SponsorLBOSpec extends Unitr\n[…]\nPASS, 86 -> 67 PARTIAL, 9 -> 1 FAIL, 5 -> 3 N/A.\nLBO category: 0.14 -> 0.77 (3.4x improvement).\nOverall weighted: 76% -> 83% PASS.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(v0.8 theme 1): Sponsor LBO — new template, 14-story block, audit…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-04-21T22:46:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f612f8681faa907f8389b48554c552a3291e57cd",
"body": "Extends the finance_core package (started with the Italian tax module)\nwith three additional primitives every template and external consumer\nneeds, so duplication across templates can be phased out incrementally\nwithout a big-bang refactor.\n\nformulas.py — pure-Python time-value + returns + valuation\n[…]\ne — no existing template is mutated. Downstream\ntemplates can migrate at their own pace by importing from\nmodelforge.finance_core.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(finance-core): shared formulas + currency + ID allocator",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-04-21T22:39:07Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1262272faa798188b82d828786736347f1165199",
"body": "…/ PEX)\n\nNew modelforge.finance_core package with a template-agnostic Italian\ntax module that ModelForge templates + external consumers (Aither,\nCreditAI) can use to compute regime-correct tax burdens. Previously the\ncompliance sheet only rendered IRES/IRAP rates as static disclosures —\nnothing in t\n[…]\nrcharge + base floor, SIIQ 6-fact eligibility matrix,\nPEX 4-condition test, apply-regime exemptions, rates-snapshot\nimmutability).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(finance-core): Italian corporate-tax module (IRES / IRAP / SIIQ …",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-04-21T22:36:11Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "16ae7de0cde0d2b94a536ec7cd7658451437076b",
"body": "3-Stmt gold-standard category: 5.50 -> 10.00 (100% PASS, 20/20 checks).\nAudit overall: 313 -> 323 PASS, fails 17 -> 9.\n\nUS-220 NOL tracker: Italian 5-year + 80% current-year offset schedule.\n Opening → Generated (if EBT < 0) → Used (MIN of opening × 0.8 cap) →\n Expired (>5y, placeholder) → Closing\n[…]\nns.\n\nAudit detectors updated #72-76 (previously all hardcoded fail).\n348/349 pytest pass (pre-existing merger reverse classifier).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(v0.8 theme 2): 3-stmt suite — NOL, DTA/DTL, SBC, Minority, Revolver",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-04-21T15:23:01Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8e09a7af4e36ea853a22aa3485b4253cc7198bbb",
"body": "Wires three bulge-tier PF parameters from row-only display (v0.7) into\nlive compute. Remaining Theme 4 stories (US-242/243/245/246/248) still\nrow-only — documented for next session.\n\nUS-240 panel_degradation_pct_annual: compounds into revenue formula.\n Revenue_t = Revenue_{t-1} × (1 + indexation) ×\n[…]\nr).\nAudit unchanged — detectors are label-based, and these rows were\nalready labeled in v0.7; this ships the missing live compute.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(v0.8 theme 4 partial): PF wire degradation, P90, and lock-up",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-04-21T15:08:52Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d660e17c170a5d89fe7afe08738bb7ca483eb311",
"body": "…r + PPA\n\nv0.8 Theme 5 stories US-250..253 complete. M&A gold-standard category\ngoes 6.82 -> 91% PASS (10/11, 6 -> 10 passed).\n\nUS-250 cross-over breakeven synergy: reverse-solve additional pre-tax\n synergy to reach EPS-neutral. MAX of zero and the gap so already-\n accretive deals cleanly show 0. \n[…]\nverall audit: 310 -> 313 PASS. 348/349 pytest pass (same pre-existing\nmerger reverse classifier failure — unrelated to this work).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(v0.8 theme 5): M&A completion — breakeven + contribution + colla…",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-04-21T15:04:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a04a88e20ef83120ad5cc974f597ac393890039f",
"body": "v0.8 Theme 3 stories US-230..233 complete. DCF gold-standard category\ngoes 50% -> 72% PASS (9/18 -> 13/18).\n\nUS-230 stub_period_days: first projection period is prorated by\n stub_days/365 and discounted at the stub midpoint (mid-year) or stub\n end (end-year). Subsequent periods cumulate stub_years\n[…]\nminals\n\n348/349 pytest pass (1 pre-existing test_reverse merger classifier).\nOverall audit: 304 -> 310 PASS (72% -> 73% weighted).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(v0.8 theme 3): DCF stub + fade + terminal normalization + 2D tables",
"author_name": "Whatsonyourmind",
"author_login": "Whatsonyourmind",
"committed_at": "2026-04-21T14:57:58Z",
"body_truncated": true,
"is_coding_agent": true
}
],
"releases_count": 5,
"commits_last_year": 134,
"latest_release_at": "2026-06-22T15:17:43Z",
"latest_release_tag": "v0.12.0",
"releases_from_tags": false,
"days_since_last_push": 22,
"active_weeks_last_year": 8,
"days_since_latest_release": 29,
"mean_days_between_releases": 9.8
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 57,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "modelforge-finance",
"exists": true,
"license": "Proprietary",
"keywords": [],
"ecosystem": "pypi",
"matches_repo": null,
"registry_url": "https://pypi.org/project/modelforge-finance/",
"is_deprecated": false,
"latest_version": "0.12.0",
"repository_url": null,
"versions_count": 7,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": 571,
"first_published_at": "2026-05-14T13:27:07.438912Z",
"latest_published_at": "2026-06-22T13:58:25.995337Z",
"latest_version_yanked": null,
"days_since_latest_publish": 29
}
]
},
"popularity": {
"forks": 0,
"stars": 1,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": {
"days": [
{
"date": "2026-05-20",
"count": 1
}
],
"complete": true,
"collected": 1,
"total_stars": 1
},
"open_issues_and_prs": 2
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"examples"
],
"has_llms_txt": true,
"has_dockerfile": true,
"has_mcp_signal": true,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"web/collab-worker/tsconfig.json"
],
"toolchain_manifests": [],
"largest_source_bytes": 100966,
"source_files_sampled": 452,
"oversized_source_files": 3,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"pyproject.toml"
],
"advisories": {
"error": null,
"scope": "published_package",
"source": "osv",
"findings": [],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 25,
"malicious_count": 0,
"assessed_package": "pypi:modelforge-finance@0.12.0",
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"pypi"
],
"dependencies": [
{
"name": "pydantic",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=2.6"
},
{
"name": "openpyxl",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=3.1.2"
},
{
"name": "pyyaml",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=6.0.1"
},
{
"name": "rich",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=13.7"
},
{
"name": "click",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=8.1"
},
{
"name": "formulas",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=1.2.7"
},
{
"name": "reportlab",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=4.0"
},
{
"name": "numpy",
"manifest": "pyproject.toml",
"ecosystem": "pypi",
"version_constraint": ">=1.26"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "click",
"direct": true,
"version": null,
"ecosystem": "pypi"
},
{
"name": "formulas",
"direct": true,
"version": null,
"ecosystem": "pypi"
},
{
"name": "numpy",
"direct": true,
"version": null,
"ecosystem": "pypi"
},
{
"name": "openpyxl",
"direct": true,
"version": null,
"ecosystem": "pypi"
},
{
"name": "pydantic",
"direct": true,
"version": null,
"ecosystem": "pypi"
},
{
"name": "pyyaml",
"direct": true,
"version": null,
"ecosystem": "pypi"
},
{
"name": "reportlab",
"direct": true,
"version": null,
"ecosystem": "pypi"
},
{
"name": "rich",
"direct": true,
"version": null,
"ecosystem": "pypi"
},
{
"name": "@cloudflare/kv-asset-handler",
"direct": false,
"version": "0.5.0",
"ecosystem": "npm"
},
{
"name": "@cloudflare/unenv-preset",
"direct": false,
"version": "2.16.1",
"ecosystem": "npm"
},
{
"name": "@cloudflare/workerd-darwin-64",
"direct": false,
"version": "1.20260601.1",
"ecosystem": "npm"
},
{
"name": "@cloudflare/workerd-darwin-arm64",
"direct": false,
"version": "1.20260601.1",
"ecosystem": "npm"
},
{
"name": "@cloudflare/workerd-linux-64",
"direct": false,
"version": "1.20260601.1",
"ecosystem": "npm"
},
{
"name": "@cloudflare/workerd-linux-arm64",
"direct": false,
"version": "1.20260601.1",
"ecosystem": "npm"
},
{
"name": "@cloudflare/workerd-windows-64",
"direct": false,
"version": "1.20260601.1",
"ecosystem": "npm"
},
{
"name": "@cloudflare/workers-types",
"direct": false,
"version": "4.20260603.1",
"ecosystem": "npm"
},
{
"name": "@cspotcode/source-map-support",
"direct": false,
"version": "0.8.1",
"ecosystem": "npm"
},
{
"name": "@emnapi/core",
"direct": false,
"version": "1.10.0",
"ecosystem": "npm"
},
{
"name": "@emnapi/runtime",
"direct": false,
"version": "1.10.0",
"ecosystem": "npm"
},
{
"name": "@emnapi/wasi-threads",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/aix-ppc64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-arm",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-arm64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-x64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/darwin-arm64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/darwin-x64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/freebsd-arm64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/freebsd-x64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-arm",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-arm64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-ia32",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-loong64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-mips64el",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-ppc64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-riscv64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-s390x",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-x64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/netbsd-arm64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/netbsd-x64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/openbsd-arm64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/openbsd-x64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/openharmony-arm64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/sunos-x64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-arm64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-ia32",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-x64",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "@img/colour",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "@img/sharp-darwin-arm64",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-darwin-x64",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-darwin-arm64",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-darwin-x64",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linux-arm",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linux-arm64",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linux-ppc64",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linux-riscv64",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linux-s390x",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linux-x64",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linuxmusl-arm64",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-libvips-linuxmusl-x64",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linux-arm",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linux-arm64",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linux-ppc64",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linux-riscv64",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linux-s390x",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linux-x64",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linuxmusl-arm64",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-linuxmusl-x64",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-wasm32",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-win32-arm64",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-win32-ia32",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@img/sharp-win32-x64",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "@jridgewell/resolve-uri",
"direct": false,
"version": "3.1.2",
"ecosystem": "npm"
},
{
"name": "@jridgewell/sourcemap-codec",
"direct": false,
"version": "1.5.5",
"ecosystem": "npm"
},
{
"name": "@jridgewell/trace-mapping",
"direct": false,
"version": "0.3.9",
"ecosystem": "npm"
},
{
"name": "@napi-rs/wasm-runtime",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "@oxc-project/types",
"direct": false,
"version": "0.133.0",
"ecosystem": "npm"
},
{
"name": "@poppinss/colors",
"direct": false,
"version": "4.1.6",
"ecosystem": "npm"
},
{
"name": "@poppinss/dumper",
"direct": false,
"version": "0.6.5",
"ecosystem": "npm"
},
{
"name": "@poppinss/exception",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-android-arm64",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-darwin-arm64",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-darwin-x64",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-freebsd-x64",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-arm-gnueabihf",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-arm64-gnu",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-arm64-musl",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-ppc64-gnu",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-s390x-gnu",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-x64-gnu",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-x64-musl",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-openharmony-arm64",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-wasm32-wasi",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-win32-arm64-msvc",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-win32-x64-msvc",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "@rolldown/pluginutils",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "@sindresorhus/is",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "@speed-highlight/core",
"direct": false,
"version": "1.2.15",
"ecosystem": "npm"
},
{
"name": "@standard-schema/spec",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "@tybys/wasm-util",
"direct": false,
"version": "0.10.2",
"ecosystem": "npm"
},
{
"name": "@types/chai",
"direct": false,
"version": "5.2.3",
"ecosystem": "npm"
},
{
"name": "@types/deep-eql",
"direct": false,
"version": "4.0.2",
"ecosystem": "npm"
},
{
"name": "@types/estree",
"direct": false,
"version": "1.0.9",
"ecosystem": "npm"
},
{
"name": "@vitest/expect",
"direct": false,
"version": "4.1.8",
"ecosystem": "npm"
},
{
"name": "@vitest/mocker",
"direct": false,
"version": "4.1.8",
"ecosystem": "npm"
},
{
"name": "@vitest/pretty-format",
"direct": false,
"version": "4.1.8",
"ecosystem": "npm"
},
{
"name": "@vitest/runner",
"direct": false,
"version": "4.1.8",
"ecosystem": "npm"
},
{
"name": "@vitest/snapshot",
"direct": false,
"version": "4.1.8",
"ecosystem": "npm"
},
{
"name": "@vitest/spy",
"direct": false,
"version": "4.1.8",
"ecosystem": "npm"
},
{
"name": "@vitest/utils",
"direct": false,
"version": "4.1.8",
"ecosystem": "npm"
},
{
"name": "assertion-error",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "blake3-wasm",
"direct": false,
"version": "2.1.5",
"ecosystem": "npm"
},
{
"name": "chai",
"direct": false,
"version": "6.2.2",
"ecosystem": "npm"
},
{
"name": "convert-source-map",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "cookie",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "detect-libc",
"direct": false,
"version": "2.1.2",
"ecosystem": "npm"
},
{
"name": "error-stack-parser-es",
"direct": false,
"version": "1.0.5",
"ecosystem": "npm"
},
{
"name": "es-module-lexer",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "esbuild",
"direct": false,
"version": "0.27.3",
"ecosystem": "npm"
},
{
"name": "estree-walker",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "expect-type",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "fdir",
"direct": false,
"version": "6.5.0",
"ecosystem": "npm"
},
{
"name": "fsevents",
"direct": false,
"version": "2.3.3",
"ecosystem": "npm"
},
{
"name": "isomorphic.js",
"direct": false,
"version": "0.2.5",
"ecosystem": "npm"
},
{
"name": "kleur",
"direct": false,
"version": "4.1.5",
"ecosystem": "npm"
},
{
"name": "lib0",
"direct": false,
"version": "0.2.117",
"ecosystem": "npm"
},
{
"name": "lightningcss",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-android-arm64",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-darwin-arm64",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-darwin-x64",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-freebsd-x64",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-arm-gnueabihf",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-arm64-gnu",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-arm64-musl",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-x64-gnu",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-x64-musl",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-win32-arm64-msvc",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-win32-x64-msvc",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "magic-string",
"direct": false,
"version": "0.30.21",
"ecosystem": "npm"
},
{
"name": "miniflare",
"direct": false,
"version": "4.20260601.0",
"ecosystem": "npm"
},
{
"name": "nanoid",
"direct": false,
"version": "3.3.12",
"ecosystem": "npm"
},
{
"name": "obug",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "path-to-regexp",
"direct": false,
"version": "6.3.0",
"ecosystem": "npm"
},
{
"name": "pathe",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "picocolors",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "picomatch",
"direct": false,
"version": "4.0.4",
"ecosystem": "npm"
},
{
"name": "postcss",
"direct": false,
"version": "8.5.15",
"ecosystem": "npm"
},
{
"name": "rolldown",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": false,
"version": "7.8.1",
"ecosystem": "npm"
},
{
"name": "sharp",
"direct": false,
"version": "0.34.5",
"ecosystem": "npm"
},
{
"name": "siginfo",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "source-map-js",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "stackback",
"direct": false,
"version": "0.0.2",
"ecosystem": "npm"
},
{
"name": "std-env",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "10.2.2",
"ecosystem": "npm"
},
{
"name": "tinybench",
"direct": false,
"version": "2.9.0",
"ecosystem": "npm"
},
{
"name": "tinyexec",
"direct": false,
"version": "1.2.4",
"ecosystem": "npm"
},
{
"name": "tinyglobby",
"direct": false,
"version": "0.2.17",
"ecosystem": "npm"
},
{
"name": "tinyrainbow",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "tslib",
"direct": false,
"version": "2.8.1",
"ecosystem": "npm"
},
{
"name": "typescript",
"direct": false,
"version": "5.9.3",
"ecosystem": "npm"
},
{
"name": "undici",
"direct": false,
"version": "7.24.8",
"ecosystem": "npm"
},
{
"name": "unenv",
"direct": false,
"version": "2.0.0-rc.24",
"ecosystem": "npm"
},
{
"name": "vite",
"direct": false,
"version": "8.0.16",
"ecosystem": "npm"
},
{
"name": "vitest",
"direct": false,
"version": "4.1.8",
"ecosystem": "npm"
},
{
"name": "why-is-node-running",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "workerd",
"direct": false,
"version": "1.20260601.1",
"ecosystem": "npm"
},
{
"name": "wrangler",
"direct": false,
"version": "4.97.0",
"ecosystem": "npm"
},
{
"name": "ws",
"direct": false,
"version": "8.20.1",
"ecosystem": "npm"
},
{
"name": "y-protocols",
"direct": false,
"version": "1.0.7",
"ecosystem": "npm"
},
{
"name": "yjs",
"direct": false,
"version": "13.6.31",
"ecosystem": "npm"
},
{
"name": "youch",
"direct": false,
"version": "4.1.0-beta.10",
"ecosystem": "npm"
},
{
"name": "youch-core",
"direct": false,
"version": "0.3.3",
"ecosystem": "npm"
},
{
"name": "anthropic",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "fastapi",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "kiwisolver",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "mcp",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "pandas",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "pdf2image",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "pdfplumber",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "pillow",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "pypdf",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "pytesseract",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "pytest",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "python-docx",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "python-multipart",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "python-pptx",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "requests",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "ruff",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "setuptools",
"direct": false,
"version": null,
"ecosystem": "pypi"
},
{
"name": "uvicorn",
"direct": false,
"version": null,
"ecosystem": "pypi"
}
],
"collected": true,
"truncated": false,
"total_count": 190,
"direct_count": 8,
"indirect_count": 182
}
},
"maintainership": {
"issues": {
"open_prs": 2,
"merged_prs": 0,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 0
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "Whatsonyourmind",
"commits": 132,
"avatar_url": "https://avatars.githubusercontent.com/u/248369826?v=4"
},
{
"type": "User",
"login": "claude",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
}
],
"contributors_sampled": 2,
"top_contributor_share": 0.985
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml",
"deploy.yml",
"publish.yml",
"security.yml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"package-lock.json"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": null,
"reason": "no pull request found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/30 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 3,
"reason": "project has 1 contributing companies or organizations -- score normalized to 3",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 9,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "no SAST tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 10,
"reason": "security policy file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": 4,
"reason": "2 out of the last 5 releases have a total of 4 signed artifacts.",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 9,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "10 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "a029c9586965d3728f36778d58851b1f60f8358c",
"ran_at": "2026-07-22T05:14:14Z",
"aggregate_score": 4.4,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": true,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-20T08:41:45Z",
"oldest_open_prs": [
{
"number": 1,
"created_at": "2026-06-20T12:08:31Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 2,
"created_at": "2026-06-22T13:56:00Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": null,
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/Whatsonyourmind/modelforge",
"host": "github.com",
"name": "modelforge",
"owner": "Whatsonyourmind"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 53,
"inputs": {
"security": 55,
"vitality": 75,
"community": 27,
"governance": 34,
"engineering": 72
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 75,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 62,
"inputs": {
"commits_last_year": 134,
"human_commit_share": 1,
"days_since_last_push": 22,
"active_weeks_last_year": 8
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 22 days ago",
"points": 28.8,
"status": "partial",
"details": [
{
"code": "push_recency",
"params": {
"days": 22
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "8/52 weeks with commits",
"points": 5.5,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 8
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "134 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 134
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": null,
"notes": [],
"value": 94,
"inputs": {
"releases_count": 5,
"latest_release_tag": "v0.12.0",
"releases_from_tags": false,
"days_since_latest_release": 29,
"mean_days_between_releases": 9.8
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "5 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 5
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 29 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 29
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~9.8 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 9.8
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "2 out of the last 5 releases have a total of 4 signed artifacts.",
"points": 4,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "unverified",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": "repository_too_young",
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": null,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "maintenance record not established from the collected data",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_unverified",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "critical",
"name": "Community & Adoption",
"value": 27,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"forks": 0,
"stars": 1,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "below_threshold"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "1 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 1
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "0 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 0
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "0 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 0
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "at_risk",
"name": "Community health",
"note": null,
"notes": [],
"value": 44,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "license file present, not a recognized license",
"points": 16.9,
"status": "partial",
"details": [
{
"code": "license_custom",
"params": {}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "at_risk",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 46,
"inputs": {
"packages": [
"modelforge-finance"
],
"dependents": null,
"ecosystems": "pypi",
"total_downloads": null,
"monthly_downloads": 571
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "571 downloads/month across pypi",
"points": 36.8,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 571,
"ecosystems": "pypi"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "at_risk",
"name": "Sustainability & Governance",
"value": 34,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 15,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 2,
"top_contributor_share": 0.985
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 98% of commits",
"points": 0.3,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 98
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "2 contributors",
"points": 2.7,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 2
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 3,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "critical",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution",
"pr_acceptance"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 1,
"inputs": {
"merged_prs": 0,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 0
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "no issues or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_issues_or_data",
"params": {}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "no decided pull requests or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_decided_prs_or_data",
"params": {}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "at_risk",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 36,
"inputs": {
"followers": 12,
"owner_type": "User",
"is_verified": null,
"owner_login": "Whatsonyourmind",
"public_repos": 20,
"account_age_days": 226
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "12 followers of Whatsonyourmind",
"points": 8,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 12,
"login": "Whatsonyourmind"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "20 public repos, account ~0 yr old",
"points": 10.9,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 20
}
},
{
"code": "account_age_years",
"params": {
"years": 0
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"modelforge-finance"
],
"ecosystems": "pypi",
"any_deprecated": false,
"min_days_since_publish": 29
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on pypi",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "pypi"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 29 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 29
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "7 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 7
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 72,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_ci_tests"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 60,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "4 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 4
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"topics": [
"credit-risk",
"excel",
"financial-modeling",
"llm-tools",
"mcp",
"openpyxl",
"ai-agents",
"audit-trail",
"data-lineage",
"dcf",
"lbo",
"mcp-server",
"valuation",
"yaml-to-excel"
],
"has_wiki": false,
"homepage": "https://pypi.org/project/modelforge-finance/",
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://pypi.org/project/modelforge-finance/",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "14 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 14
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 55,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"ci_tests",
"packaging"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 44,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 16,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 2,
"scorecard_aggregate": 4.4
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "no pull request found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.2,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "no SAST tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file detected",
"points": 5,
"status": "met",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "2 out of the last 5 releases have a total of 4 signed artifacts.",
"points": 3,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 6.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "10 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "excellent",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the pypi:modelforge-finance@0.12.0 runtime dependency closure — what installing the published package pulls in — 25 packages. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_published",
"params": {
"package": "pypi:modelforge-finance@0.12.0",
"assessed": 25
}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 0,
"affected_packages": 0,
"assessed_packages": 25,
"unassessed_packages": 0,
"affected_by_severity": "none",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "no indirect dependency carries a known advisory",
"points": 25,
"status": "met",
"details": [
{
"code": "no_indirect_advisories",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "excellent",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 25,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 3
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "no confirmed policy-scope location match",
"points": 100,
"status": "met",
"details": [
{
"code": "jurisdiction_no_match",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "moderate",
"name": "AI Readiness",
"value": 59,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "moderate",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"has_llms_txt": true,
"legible_history_share": 1,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "no CLAUDE.md / AGENTS.md / editor rules",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_instructions",
"params": {}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": "llms.txt present",
"points": 15,
"status": "met",
"details": [
{
"code": "llms_txt_present",
"params": {}
}
],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 100,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 53,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"package-lock.json"
],
"has_dockerfile": true,
"typed_language": false,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [
"web/collab-worker/tsconfig.json"
],
"agent_commit_share": 0.68,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "web/collab-worker/tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "web/collab-worker/tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "Dockerfile, lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Dockerfile, lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "68 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 68,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "good",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 82,
"inputs": {
"primary_language": "Python",
"largest_source_bytes": 100966,
"source_files_sampled": 452,
"oversized_source_files": 3
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Python with type-check config (web/collab-worker/tsconfig.json)",
"points": 27,
"status": "partial",
"details": [
{
"code": "typecheck_config_language",
"params": {
"files": "web/collab-worker/tsconfig.json",
"language": "Python"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "3/452 source files over 60KB",
"points": 54.6,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 452,
"oversized": 3
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "moderate",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"example_dirs": [
"examples"
],
"has_mcp_signal": true,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 20,
"status": "met",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "examples",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "examples"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [],
"report_type": "repository",
"generated_at": "2026-07-22T05:14:19.660775Z",
"schema_version": "0.26.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/w/Whatsonyourmind/modelforge.svg",
"full_name": "Whatsonyourmind/modelforge",
"license_state": "custom",
"license_spdx": null
}