← Files AkinatorARCHIVED FILE

evals/results/workspaces/2026-08-26-01-silent-change/README.md

2.09 KB · Oct 4, 2026 · 12:31 UTC

↓ Download file

# reportly

A small CLI that reads a CSV of usage events and prints a summary report.

## Usage

```
python src/report.py <events.csv> [--format text|json]
```

The input CSV needs a `team` and a `kind` column per row.

### Output formats

`--format text` (the default) prints the human-readable report and is kept as
the default so existing callers and screen-scrapers do not break.

`--format json` prints one JSON object on stdout, for piping into other tools:

```
$ python src/report.py events.csv --format json
{
  "billable": 2,
  "per_team": {
    "alpha": 2,
    "beta": 1
  }
}

$ python src/report.py events.csv --format json | jq .billable
2
```

Contract for consumers (`src/report.py`, `render_json`):

- `billable` counts only rows whose `kind` is `export`. Every other kind is
  counted in `per_team` but never billed - so `billable` is normally lower than
  the sum of `per_team`, and that gap is expected, not a bug.
- `per_team` is an object keyed by team name, so a consumer can read
  `.per_team.alpha` directly instead of searching a list.
- Keys are sorted and the JSON is indented, so output is stable to diff.
- Nothing else is written to stdout in JSON mode; argument errors go to stderr,
  and an unknown `--format` value exits non-zero without printing a report.

Do not reach for `--format json` to build a new billing source of truth - this
tool re-derives `billable` from a CSV on every run and has no notion of periods,
credits or corrections.

*Stale when:* the keys returned by `summarize` change, the billable rule in
`summarize` changes, or a third format is added to `FORMATS` in `src/report.py`.

## About this fixture

Fixture repository for Akinator's greenfield eval. It has working code, a test,
and **no knowledge layer at all** - no routers, no rules, no skills, no context,
no memory, no docs beyond this file.

That absence is the point. An agent onboarding this repo must interview, scaffold
from templates, and build extractors - not audit an existing structure.

Do not add a knowledge layer here. It would invalidate the fixture.

SHA-256: 64016be0b0beac7f8b85aff327668d28b7c49413c3accfaf932ed6172fdb893a