diff --git a/README.md b/README.md index bf9239a..24f3341 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,14 @@ +

+ Metis / Benchmark — can a model estimate software effort from public data? +

+ # metis-benchmark **Can a model estimate software effort from public data? A pre-registered blind test — with an honest negative result.** [![CI](https://github.com/NaCode-Studios/metis-benchmark/actions/workflows/ci.yml/badge.svg)](https://github.com/NaCode-Studios/metis-benchmark/actions/workflows/ci.yml) -[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) -[![Python 3.11–3.13](https://img.shields.io/badge/python-3.11%E2%80%933.13-3776ab.svg)](pyproject.toml) +[![License: MIT](https://img.shields.io/badge/License-MIT-5C6567?labelColor=14181A)](LICENSE) +[![Python 3.11–3.13](https://img.shields.io/badge/python-3.11%E2%80%933.13-3776AB?logo=python&logoColor=white&labelColor=14181A)](pyproject.toml) Reproducible backtest of the **Metis** software effort-estimation engine on open datasets. This repository is the Phase 0 gate (G0) of the @@ -104,5 +108,8 @@ Conformalized Quantile Regression (Romano, Patterson, Candès 2019) via the MAPIE library. Cite the original sources when reusing the data. ## License - Code: [MIT](LICENSE). Datasets: see their respective licenses. + +--- + +Brand assets — the tetradrachm mark, the wordmark, and the colour and type tokens — are in [`docs/brand`](docs/brand). diff --git a/docs/brand/README.md b/docs/brand/README.md new file mode 100644 index 0000000..a968000 --- /dev/null +++ b/docs/brand/README.md @@ -0,0 +1,42 @@ +# Metis brand assets + +The mark is a tetradrachm: a filled field, a beaded rim, and the mu of ΜΗΤΙΣ punched into it. Athenian +silver is the reference, currency being the first instrument anyone agreed to trust because it was +verifiably struck to a standard. The wordmark sits beside it at cap height, and each repository names +itself after it: `METIS / BENCHMARK`, `METIS / API`, and so on. + +| File | Use | +| --- | --- | +| `metis-mark.svg` | the mark at 24px and up, where the rim reads | +| `metis-mark-small.svg` | below 24px: the rim is dropped, the disc and the mu carry it alone | +| `metis-mark-bronze.svg` | the bronze field | +| `metis-mark-outline.svg` | one keyline on paper | +| `metis-mark-reversed.svg` | on an ink ground | +| `metis-lockup.svg` / `-reversed.svg` / `-bronze.svg` | mark, wordmark and the line beneath it | +| `metis-favicon-512.png` | favicon, avatar, app icon | +| `metis-tokens.css` | colour, type and tracking tokens | + +Every SVG here is self-contained: the letterforms are outlined, so the mark renders the same whether or +not Bodoni Moda and Cormorant Garamond are installed. + +**Clear space** equals the rim inset, r/6, on every side. **Minimum size** is 24px for the full mark; +below that use `metis-mark-small.svg`. + +**Type.** Bodoni Moda for titles and verdict statements, whose high-contrast strokes echo the punched +mu. Cormorant Garamond for the wordmark only, always letterspaced 0.16em, never body copy. IBM Plex Sans +for body and UI, IBM Plex Mono for every number, metric, dataset and command. + +**Colour.** Ink `#14181A` and a cool neutral ground carry almost every surface. Bronze `#2C5449` marks +one thing per view: the reading that matters. The verdict colours, brass `#9A7B3F` for under-powered +evidence and oxblood `#7B2B33` for a fired stop rule, are reserved for pre-registered outcomes and are +never used decoratively. + +**Don't.** No metallic gradient, no emboss, no drop shadow: it is a flat strike, not a rendering of +silver. Do not set the wordmark without its tracking, and do not use the mu on its own as a letter. + +## One note on the mu + +Bodoni Moda ships no U+039C, so a live Greek mu falls back to Georgia and the mark loses the +high-contrast strokes the type spec describes. Greek capital mu and Latin M are the same letterform, so +the outlines here are drawn from Bodoni's M at a size that reproduces the cap height of the original, +which keeps the intended typeface and the intended proportions at once. diff --git a/docs/brand/metis-benchmark-social-preview.png b/docs/brand/metis-benchmark-social-preview.png new file mode 100644 index 0000000..4e17212 Binary files /dev/null and b/docs/brand/metis-benchmark-social-preview.png differ diff --git a/docs/brand/metis-favicon-512.png b/docs/brand/metis-favicon-512.png new file mode 100644 index 0000000..7ddf94c Binary files /dev/null and b/docs/brand/metis-favicon-512.png differ diff --git a/docs/brand/metis-lockup-bronze.svg b/docs/brand/metis-lockup-bronze.svg new file mode 100644 index 0000000..7410409 --- /dev/null +++ b/docs/brand/metis-lockup-bronze.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/brand/metis-lockup-reversed.svg b/docs/brand/metis-lockup-reversed.svg new file mode 100644 index 0000000..d227894 --- /dev/null +++ b/docs/brand/metis-lockup-reversed.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/brand/metis-lockup.svg b/docs/brand/metis-lockup.svg new file mode 100644 index 0000000..bd3eda2 --- /dev/null +++ b/docs/brand/metis-lockup.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/brand/metis-mark-bronze.svg b/docs/brand/metis-mark-bronze.svg new file mode 100644 index 0000000..2d4ec2b --- /dev/null +++ b/docs/brand/metis-mark-bronze.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/brand/metis-mark-outline.svg b/docs/brand/metis-mark-outline.svg new file mode 100644 index 0000000..7828e0e --- /dev/null +++ b/docs/brand/metis-mark-outline.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/brand/metis-mark-reversed.svg b/docs/brand/metis-mark-reversed.svg new file mode 100644 index 0000000..67bc7e4 --- /dev/null +++ b/docs/brand/metis-mark-reversed.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/brand/metis-mark-small.svg b/docs/brand/metis-mark-small.svg new file mode 100644 index 0000000..54db685 --- /dev/null +++ b/docs/brand/metis-mark-small.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/brand/metis-mark.svg b/docs/brand/metis-mark.svg new file mode 100644 index 0000000..f8f4367 --- /dev/null +++ b/docs/brand/metis-mark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/brand/metis-tokens.css b/docs/brand/metis-tokens.css new file mode 100644 index 0000000..25c946a --- /dev/null +++ b/docs/brand/metis-tokens.css @@ -0,0 +1,39 @@ +/* Metis design system tokens. + Neutral ground, patinated bronze, three verdicts. Bronze marks one thing per + view: the reading that matters. Verdict colours are reserved for + pre-registered outcomes and are never used decoratively. */ +:root { + /* Ground */ + --metis-paper: #F1F1EE; /* page ground */ + --metis-card: #FFFFFF; /* surfaces, tables */ + --metis-rule: #DAD9D3; /* borders, dividers */ + --metis-rule-soft: #ECEBE6; /* inner dividers */ + + /* Ink */ + --metis-ink: #14181A; /* the coin field, headings */ + --metis-graphite: #2C3335; /* body text */ + --metis-slate: #5C6567; /* labels, captions */ + --metis-mute: #8D9496; /* meta, disabled */ + + /* The one accent */ + --metis-bronze: #2C5449; + --metis-bronze-wash: #E4EBE8; /* callout ground */ + --metis-patina: #B7CCC5; /* CQR interval bands */ + + /* Verdicts — pre-registered outcomes only */ + --metis-brass: #9A7B3F; /* under-powered evidence */ + --metis-oxblood: #7B2B33; /* stop rule fired */ + + /* Type */ + --metis-font-display: 'Bodoni Moda', Georgia, serif; /* titles, verdicts */ + --metis-font-wordmark: 'Cormorant Garamond', Georgia, serif; + --metis-font-body: 'IBM Plex Sans', system-ui, sans-serif; + --metis-font-mono: 'IBM Plex Mono', ui-monospace, monospace; + + --metis-wordmark-tracking: 0.16em; /* the wordmark is always letterspaced */ + --metis-eyebrow-tracking: 0.12em; + --metis-display: 500 54px/1.1 var(--metis-font-display); + --metis-heading: 500 32px/1.2 var(--metis-font-display); + --metis-body: 400 17px/1.65 var(--metis-font-body); + --metis-mono: 400 13px/1.5 var(--metis-font-mono); +} diff --git a/docs/metis-benchmark-hero.png b/docs/metis-benchmark-hero.png new file mode 100644 index 0000000..b6edb6a Binary files /dev/null and b/docs/metis-benchmark-hero.png differ diff --git a/pyproject.toml b/pyproject.toml index 0cdfb56..76435fd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,7 +37,11 @@ plots = [ ] dev = [ "pytest>=8.0", - "ruff>=0.4", + # Upper bound so the lint gate stays reproducible: ruff 0.16.0 added rules + # (RUF046, RUF059, PYI034, a wider UP035/UP037) that fire on code this repo + # already had. 0.15.x is clean. Lift the bound together with a pass over + # the new findings. + "ruff>=0.4,<0.16", ] [tool.hatch.build.targets.wheel]