尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
Quantitative cyber-risk analysis platform — FAIR methodology, control-aware modeling (FAIR-CAM), Monte Carlo simulation, financial impact analysis, and executive reporting.
Status: in production UAT; evaluation self-hosting supported via Docker Compose. See ROADMAP.md and the intro deck.查看完整 README ↗Quantitative cyber-risk analysis platform — FAIR methodology, control-aware modeling (FAIR-CAM), Monte Carlo simulation, financial impact analysis, and executive reporting.
Status: in production UAT; evaluation self-hosting supported via Docker Compose. See ROADMAP.md and the intro deck.
| Dashboard | Loss exceedance | Scenario wizard |
|---|---|---|
This is the v3 ground-up rebuild, succeeding a Streamlit prototype (v1 RiskFlux) that validated the FAIR math but whose UI didn't survive, and an unfinished Node/Remix/MongoDB attempt (v2 RiskFlow). The validated fair_cam engine from v1 carries forward as v3's calculation core.
git clone https://github.com/yasirhamza/idraa && cd idraa
cp .env.example .env # then set SESSION_SECRET + MFA_ENCRYPTION_KEY (see file)
docker compose up -d --build # (Docker Compose ≥ 2.24)
open http://localhost:8000/setup # first-run admin creation
That's a Postgres + app stack: the app container runs alembic upgrade head before it starts serving, and docker-compose.yml reads .env via env_file: — every uncommented line there lands in the app's environment (see .env.example for which vars are safe to leave commented). If this instance is reachable from anywhere other than your own machine, set ENVIRONMENT=prod, a real WEBAUTHN_RP_ID + WEBAUTHN_ORIGINS (passkeys are bound to the RP-ID for good — get it right before the first enrollment), and put a TLS-terminating reverse proxy in front of it with FORWARDED_ALLOW_IPS set to the proxy's address so uvicorn trusts its forwarded headers. The current license permits this kind of evaluation self-hosting; it does not permit other use (see License below).
Stack: FastAPI + Jinja2 + HTMX/Alpine for the UI (no JS build step), SQLAlchemy 2 + Alembic for persistence, SQLite for dev/test, Postgres for compose, and SQLite or Postgres in production (the reference production deployment runs SQLite on a persistent volume).
Engine: a native Monte Carlo simulator drives FAIR-CAM Boolean control composition (with κ meta-reliability coupling for meta-controls), per-control Shapley and if-removed attribution, and weight-robustness ensembles that express FAIR-CAM's composition-weight uncertainty as ranges rather than a single point estimate. fair_cam is first-party and is the only place FAIR math is computed — the app layer never re-derives it.
Verification discipline: every run ships an independent in-Excel verification workbook (LET/RANDARRAY dynamic-array Monte Carlo) that reproduces sampling and ALE from the same inputs, hand-derived math anchors pin the engine's statistical assumptions in tests, and a pre-push local gate (ruff + mypy + pytest) mirrors what CI would run.
Methodology, in the open: Jones & Freund warn that anyone who changes the FAIR model's branches, relationships, or weights must be prepared to defend the change and have it evaluated in an open forum (Measuring and Managing Information Risk, 2nd ed., Elsevier, 2026, p. 42). The documents below are that defence; open an issue against a specific entry to challenge one.
Full reference: .env.example (copy to .env; every variable there is either active or ships commented out with an example value — uncomment what you set).
| Variable | Purpose |
|---|---|
SESSION_SECRET | Cookie-signing secret. Required; compose refuses to start without it; prod requires 32+ characters. |
ENVIRONMENT | dev | prod | test. prod turns on secret/WebAuthn/MFA-key boot hardening — set it for any instance reachable over a network. |
DATABASE_URL | SQLAlchemy DSN. Ignored under docker compose (compose pins the bundled Postgres service); applies to non-compose runs. |
AUTH_MFA_POLICY | required (default) or optional — whether every user must enroll a second factor at first login. |
MFA_ENCRYPTION_KEY | Encrypts stored TOTP secrets at rest. Falls back to a SESSION_SECRET-derived key in dev/test; prod refuses to boot without a distinct 32+ character value. |
WEBAUTHN_RP_ID | Passkey relying-party ID — your registrable domain, no scheme/port. Permanently binds enrolled passkeys; prod refuses to boot on the localhost default. |
WEBAUTHN_ORIGINS | Comma-separated https:// origins that must match WEBAUTHN_RP_ID's host (or a subdomain). |
FORWARDED_ALLOW_IPS | IP address(es) of your reverse proxy, so uvicorn trusts its forwarded headers. Set it to the proxy's actual address, never * — a proxy appends to X-Forwarded-For rather than replacing it, so * (which trusts the leftmost entry) lets any client that can reach the app port directly forge a trusted "client IP". |
TRUSTED_CLIENT_IP_HEADER / TRUSTED_PROXY_COUNT | The per-source login throttle needs one of these set to attribute failures per client — a dedicated overwrite-protected header (TRUSTED_CLIENT_IP_HEADER, e.g. Fly/Cloudflare/Azure) for edges that provide one, or an exact hop count (TRUSTED_PROXY_COUNT) for X-Forwarded-For-only edges (AWS ALB, GCP LB, nginx); unset, the per-source throttle no-ops (the per-account throttle still applies) — see .env.example for per-platform values. |
Prerequisites: Python 3.11+, uv, Docker Desktop.
# First-time setup — BOTH pre-commit stages are required
uv sync --extra dev
uv run playwright install chromium
uv run pre-commit install # per-commit lints
uv run pre-commit install --hook-type pre-push # branch gates + local verification gate
# Local verification gate (a fast local mirror of the CI gate; runs on push):
# ruff check + ruff format --check + mypy + fast pytest. Runs automatically
# on `git push`; run manually with:
uv run python scripts/run_local_gate.py
# Individual tasks
uv run python -m idraa.tasks lint
uv run python -m idraa.tasks typecheck
uv run python -m idraa.tasks test
uv run python -m idraa.tasks e2e
# Run the dev server
docker compose up -d --build
curl http://localhost:8000/healthz
docker compose down -v
# Database migrations
uv run alembic upgrade head
Operational tuning (MC iteration caps, retention, memory patterns) is documented in src/idraa/config.py docstrings and .env.example.
Source-visible, all rights reserved. No license is currently granted: you may read this code, but you may not use, copy, modify, or redistribute it. A license will be chosen at product launch. Evaluation self-hosting (running your own instance to assess the product) is welcome; any other use needs a license grant.
Idraa incorporates a small amount of third-party open-source code, which remains
under its own (permissive) license — the "all rights reserved" above covers
Idraa's own code, not these incorporated portions. Notices and full license
texts are in THIRD_PARTY_LICENSES.md, most notably a
Python port of the collector (tidyrisk) quantile-fitting and opinion-pooling
routines, used under the MIT License (© 2018 David F. Severski).
FAIR™ and FAIR-CAM™ (Factor Analysis of Information Risk / FAIR Controls Analytics Model) are trademarks of the FAIR Institute; Open FAIR™ is a trademark of The Open Group. Idraa implements these published methodologies and is not affiliated with, sponsored by, or endorsed by the FAIR Institute or The Open Group. References to the standards are nominative — they describe what the software implements.