{"id":51377717,"url":"https://github.com/bbugyi200/actstat","last_synced_at":"2026-07-03T14:34:00.650Z","repository":{"id":368054806,"uuid":"1283345642","full_name":"bbugyi200/actstat","owner":"bbugyi200","description":"GitHub Actions Status","archived":false,"fork":false,"pushed_at":"2026-06-28T20:45:32.000Z","size":838,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-28T22:23:21.484Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bbugyi200.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-28T20:33:42.000Z","updated_at":"2026-06-28T20:45:36.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bbugyi200/actstat","commit_stats":null,"previous_names":["bbugyi200/actstat"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/bbugyi200/actstat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbugyi200%2Factstat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbugyi200%2Factstat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbugyi200%2Factstat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbugyi200%2Factstat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bbugyi200","download_url":"https://codeload.github.com/bbugyi200/actstat/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bbugyi200%2Factstat/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35090436,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-03T02:00:05.635Z","response_time":110,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-03T14:33:59.441Z","updated_at":"2026-07-03T14:34:00.642Z","avatar_url":"https://github.com/bbugyi200.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# actstat\n\n[![CI](https://github.com/bbugyi200/actstat/actions/workflows/ci.yml/badge.svg)](https://github.com/bbugyi200/actstat/actions/workflows/ci.yml)\n\nA fast, beautiful Rust CLI that reports the status of the most recent settled\ndefault-branch GitHub Actions commits across a configured set of repositories.\n\n`actstat` answers one question quickly: **which of my projects are healthy, and\nwhat broke most recently?** A green commit collapses to a single compact line; a\nred commit expands into every failed workflow run, failed job, and failed step\nwith direct links to the broken logs. Output is grouped by repository, quiet\nabout success, and loud and detailed about failure.\n\nIt is built to be comfortable as an interactive terminal command **and**\ndependable inside cronjobs and scripts: async fan-out across repositories, a\nsmall and conservative number of GitHub API calls, partial-failure isolation (one\nbroken repository never aborts the run), and stable machine-readable output\n(`json` / `jsonl`) that keeps stdout pipe-clean.\n\n## Highlights\n\n- **Compact when healthy, detailed when not.** Green commits are one line; red\n  commits expand to failed runs → failed jobs → failed steps → GitHub URLs.\n- **Resilient.** A repo with no access, disabled Actions, or a rate limit becomes\n  an inline error row instead of crashing the run.\n- **Scriptable.** `--format json` / `--format jsonl` emit stable, deterministic\n  records on stdout; all diagnostics go to stderr.\n- **Conservative \u0026 fast.** Bounded-concurrency async HTTP with retry/backoff on\n  transient errors.\n- **No secrets in config.** Tokens come only from the environment or `gh`.\n\n## Installation\n\n`actstat` is a standard Cargo binary. Install it from a checkout of this repo:\n\n```sh\ncargo install --path .\n```\n\nThis builds an optimized release binary and places `actstat` on your Cargo bin\npath (typically `~/.cargo/bin`). Make sure that directory is on your `PATH`.\n\nRequires a recent stable Rust toolchain (edition 2021; see `rust-version` in\n[`Cargo.toml`](Cargo.toml) for the minimum supported version).\n\n### Local development build\n\n```sh\ncargo build              # debug binary at target/debug/actstat\ncargo build --release    # optimized binary at target/release/actstat\ncargo run -- list -n 3   # build and run in one step\n```\n\nIf you have [`just`](https://github.com/casey/just) installed, the\n[`Justfile`](Justfile) wraps the common tasks (`just build`, `just run -- …`,\n`just test`, `just check`).\n\n## Configuration\n\n`actstat` reads a small YAML config that lists the **projects** to inspect. Each\nentry is either an entire **org** (expanded to all of its repositories) or a\nsingle **repo** (`owner/name`):\n\n```yaml\n# ~/.config/actstat/config.yml\nprojects:\n  - org: sase-org\n    exclude:\n      - sase-org/sase-android # include every sase-org repo except this one\n  - org: bobs-org # all repositories in the bobs-org organization\n  - repo: bbugyi200/dotfiles # a single repository\n  - repo: bbugyi200/actstat # this repository\n```\n\nAll sources resolve into a de-duplicated, alphabetically sorted list of\n`owner/name`. A repository named both explicitly and via its org appears once.\n\n### Org filters\n\nAn `org:` entry can refine how that organization's repositories are expanded:\n\n| Key | Description | Default |\n| --- | --- | --- |\n| `exclude` | List of `owner/name` repos to drop from that org's expansion. Owners must match the org. This does not block an explicit `repo:` entry for the same repository. | `[]` |\n| `include_archived` | Include archived repos in the org expansion. | `false` |\n| `include_forks` | Include forked repos in the org expansion. | `false` |\n\n### Where the config is found\n\nThe config path is resolved in this order; the first hit wins:\n\n1. `--config PATH`\n2. `ACTSTAT_CONFIG` environment variable\n3. `$XDG_CONFIG_HOME/actstat/config.yml`\n4. `~/.config/actstat/config.yml`\n\n`--config` and `ACTSTAT_CONFIG` are explicit overrides and are used verbatim; the\ntwo well-known locations are tried in order and the first existing file is used.\nIf none is found, `actstat` exits `1` with an actionable message and a minimal\nexample config printed to stderr.\n\n### Managing the config with chezmoi\n\nThe real machine config is managed by chezmoi. Its source lives at\n`home/dot_config/actstat/config.yml` in the chezmoi source repo (the `home/`\nsource root is set by `.chezmoiroot`), so it materializes at\n`~/.config/actstat/config.yml`:\n\n```sh\nchezmoi apply ~/.config/actstat/config.yml\n```\n\n### Overriding the config (tests / ad-hoc runs)\n\nPoint `actstat` at a different file without touching the managed config:\n\n```sh\nACTSTAT_CONFIG=/tmp/actstat-test.yml actstat list\nactstat list --config ./fixtures/config.yml\n```\n\n## Authentication\n\nNo secrets ever go in the config. `actstat` discovers a GitHub token in this\norder:\n\n1. `ACTSTAT_GITHUB_TOKEN`\n2. `GH_TOKEN`, then `GITHUB_TOKEN`\n3. `gh auth token` (if the [GitHub CLI](https://cli.github.com/) is installed and\n   authenticated)\n4. otherwise it makes **unauthenticated** requests and prints a warning to stderr\n\nUnauthenticated requests have very low rate limits and cannot see private repos\nor fully expand orgs, so an authenticated token is strongly recommended. The\nsimplest path is `gh auth login` with `repo` and `read:org` scopes — `actstat`\nthen picks up the token automatically via `gh auth token`.\n\n## Usage\n\n```\nactstat [OPTIONS]          # same as `actstat list`\nactstat list [OPTIONS]\n```\n\nRunning `actstat` with no subcommand behaves exactly like `actstat list`, and the\n`list` options work at the top level too (so `actstat -n 3` == `actstat list\n-n 3`).\n\n### `list` options\n\n| Option | Description | Default |\n| --- | --- | --- |\n| `-n, --limit \u003cN\u003e` | Most-recent settled commits to inspect **per repository** (must be ≥ 1). | `1` |\n| `-f, --format \u003chuman\\|json\\|jsonl\u003e` | Output format. | `human` |\n| `-c, --config \u003cPATH\u003e` | Explicit config path (overrides discovery). | discovery |\n| `--color \u003cauto\\|always\\|never\u003e` | Color control; also honors `NO_COLOR`. | `auto` |\n| `--only-failures` | Show only red commits in **human** output. | off |\n| `--repo \u003cOWNER/NAME\u003e` | Restrict to a subset of configured repos (repeatable). | all |\n| `--concurrency \u003cN\u003e` | Max repositories fetched concurrently. | `8` |\n| `--fail-on-failure` | Exit non-zero if any inspected commit is red. | off |\n| `-v, --verbose` | Increase diagnostic verbosity (stderr only; repeatable). | off |\n| `-q, --quiet` | Suppress non-error diagnostics (stderr only). | off |\n\n`--only-failures` filters the **human** view only; `json` and `jsonl` always\ninclude every shown commit so machine consumers can do their own filtering.\n\n### Examples\n\n```sh\nactstat                              # status of the latest settled commit per repo\nactstat -n 5                         # inspect the 5 most recent settled commits each\nactstat --only-failures              # show only what's broken\nactstat --repo bbugyi200/actstat     # just one repo, ignoring the rest of the config\nactstat -f json | jq '.repositories[] | select(.commits[].conclusion != \"success\")'\nactstat --fail-on-failure -q         # quiet gate for cron/CI (see exit codes below)\n```\n\n## Output\n\n### Human (default)\n\nRepositories are grouped and sorted alphabetically; commits are newest settled\nfirst on each repository's default branch. A green commit is one compact line\n(icon · short SHA · title · branch · duration · relative time). A red commit\nkeeps that summary, appends its aggregate conclusion label, and expands into the\nfailed workflow runs, their failed jobs, failed steps, and direct GitHub URLs.\nRepositories with no settled commits are omitted; repositories that error still\nshow a clear error row.\n\n```text\nbbugyi200/actstat\n  ✔ a1b2c3d Add list subcommand · master · 2m30s · 7m ago\n\nbbugyi200/dotfiles\n  ✘ 9f8e7d6 Refactor shell init · master · 2 workflows · 4m10s · 15m ago · failure\n      ✘ CI · #128 · 4m10s · failure\n          ✘ test (3.14)\n              step 5: Run tests\n              https://github.com/bbugyi200/dotfiles/actions/runs/2002/job/3003\n          https://github.com/bbugyi200/dotfiles/actions/runs/2002\n\n✘ bobs-org/locked  403 Forbidden (token lacks access)\n```\n\nReading the example:\n\n- `bbugyi200/actstat` — latest settled `master` commit passed; its workflow\n  group took `2m30s` and finished `7m ago`.\n- `bbugyi200/dotfiles` — latest settled `master` commit is red because `CI`\n  failed; `Deploy Docs` passed on the same commit, so the commit shows\n  `2 workflows`. The failed job `test (3.14)` failed at `step 5: Run tests`,\n  with links straight to the job log and the run.\n- `bobs-org/locked` — an error row: the token can't access it.\n\nColor is adaptive: on by default when stdout is a TTY, off when piped, when\n`--color never` is set, or when `NO_COLOR` is present. With color stripped the\nlayout is unchanged and byte-clean (no escape codes), so it diffs and greps\ncleanly.\n\n### JSON (`--format json`)\n\nA single pretty-printed document: top-level metadata plus a `repositories` array.\nEach repo carries its `commits` (and an `error` field only when it failed); each\ncommit carries its `runs`, and each problem run carries failed `jobs` and failed\n`steps`. Output is deterministic for deterministic input.\n\n```json\n{\n  \"generated_at\": \"2026-06-29T12:00:00Z\",\n  \"limit\": 1,\n  \"repositories\": [\n    {\n      \"repo\": \"bbugyi200/actstat\",\n      \"commits\": [\n        {\n          \"sha\": \"a1b2c3d\",\n          \"title\": \"Add list subcommand\",\n          \"branch\": \"master\",\n          \"event\": \"push\",\n          \"conclusion\": \"success\",\n          \"url\": \"https://github.com/bbugyi200/actstat/commit/a1b2c3d4e5f67890\",\n          \"finished_at\": \"2026-06-29T11:52:30Z\",\n          \"duration_seconds\": 150,\n          \"runs\": [\n            {\n              \"workflow\": \"CI\",\n              \"title\": \"Add list subcommand\",\n              \"run_number\": 42,\n              \"event\": \"push\",\n              \"branch\": \"master\",\n              \"sha\": \"a1b2c3d\",\n              \"conclusion\": \"success\",\n              \"url\": \"https://github.com/bbugyi200/actstat/actions/runs/1001\",\n              \"created_at\": \"2026-06-29T11:50:00Z\",\n              \"updated_at\": \"2026-06-29T11:52:30Z\",\n              \"duration_seconds\": 150,\n              \"jobs\": []\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"repo\": \"bbugyi200/dotfiles\",\n      \"commits\": [\n        {\n          \"sha\": \"9f8e7d6\",\n          \"title\": \"Refactor shell init\",\n          \"branch\": \"master\",\n          \"event\": \"push\",\n          \"conclusion\": \"failure\",\n          \"url\": \"https://github.com/bbugyi200/dotfiles/commit/9f8e7d6c5b4a3210\",\n          \"finished_at\": \"2026-06-29T11:44:10Z\",\n          \"duration_seconds\": 250,\n          \"runs\": [\n            {\n              \"workflow\": \"CI\",\n              \"title\": \"Refactor shell init\",\n              \"run_number\": 128,\n              \"event\": \"push\",\n              \"branch\": \"master\",\n              \"sha\": \"9f8e7d6\",\n              \"conclusion\": \"failure\",\n              \"url\": \"https://github.com/bbugyi200/dotfiles/actions/runs/2002\",\n              \"created_at\": \"2026-06-29T11:40:00Z\",\n              \"updated_at\": \"2026-06-29T11:44:10Z\",\n              \"duration_seconds\": 250,\n              \"jobs\": [\n                {\n                  \"name\": \"test (3.14)\",\n                  \"conclusion\": \"failure\",\n                  \"url\": \"https://github.com/bbugyi200/dotfiles/actions/runs/2002/job/3003\",\n                  \"steps\": [\n                    {\n                      \"name\": \"Run tests\",\n                      \"number\": 5,\n                      \"conclusion\": \"failure\"\n                    }\n                  ]\n                }\n              ]\n            },\n            {\n              \"workflow\": \"Deploy Docs\",\n              \"title\": \"Refactor shell init\",\n              \"run_number\": 33,\n              \"event\": \"push\",\n              \"branch\": \"master\",\n              \"sha\": \"9f8e7d6\",\n              \"conclusion\": \"success\",\n              \"url\": \"https://github.com/bbugyi200/dotfiles/actions/runs/2003\",\n              \"created_at\": \"2026-06-29T11:41:00Z\",\n              \"updated_at\": \"2026-06-29T11:43:00Z\",\n              \"duration_seconds\": 120,\n              \"jobs\": []\n            }\n          ]\n        }\n      ]\n    },\n    {\n      \"repo\": \"bobs-org/locked\",\n      \"commits\": [],\n      \"error\": \"403 Forbidden (token lacks access)\"\n    }\n  ]\n}\n```\n\n### JSONL (`--format jsonl`)\n\nOne JSON record per line for easy `jq`/shell piping. Every line carries a `type`\n(`commit` or `repo_error`) and the `repo` it belongs to: one `commit` record per\nshown commit, plus one `repo_error` record per errored repository.\n\n```jsonl\n{\"branch\":\"master\",\"conclusion\":\"success\",\"duration_seconds\":150,\"event\":\"push\",\"finished_at\":\"2026-06-29T11:52:30Z\",\"repo\":\"bbugyi200/actstat\",\"runs\":[{\"branch\":\"master\",\"conclusion\":\"success\",\"created_at\":\"2026-06-29T11:50:00Z\",\"duration_seconds\":150,\"event\":\"push\",\"jobs\":[],\"run_number\":42,\"sha\":\"a1b2c3d\",\"title\":\"Add list subcommand\",\"updated_at\":\"2026-06-29T11:52:30Z\",\"url\":\"https://github.com/bbugyi200/actstat/actions/runs/1001\",\"workflow\":\"CI\"}],\"sha\":\"a1b2c3d\",\"title\":\"Add list subcommand\",\"type\":\"commit\",\"url\":\"https://github.com/bbugyi200/actstat/commit/a1b2c3d4e5f67890\"}\n{\"branch\":\"master\",\"conclusion\":\"failure\",\"duration_seconds\":250,\"event\":\"push\",\"finished_at\":\"2026-06-29T11:44:10Z\",\"repo\":\"bbugyi200/dotfiles\",\"runs\":[{\"branch\":\"master\",\"conclusion\":\"failure\",\"created_at\":\"2026-06-29T11:40:00Z\",\"duration_seconds\":250,\"event\":\"push\",\"jobs\":[{\"conclusion\":\"failure\",\"name\":\"test (3.14)\",\"steps\":[{\"conclusion\":\"failure\",\"name\":\"Run tests\",\"number\":5}],\"url\":\"https://github.com/bbugyi200/dotfiles/actions/runs/2002/job/3003\"}],\"run_number\":128,\"sha\":\"9f8e7d6\",\"title\":\"Refactor shell init\",\"updated_at\":\"2026-06-29T11:44:10Z\",\"url\":\"https://github.com/bbugyi200/dotfiles/actions/runs/2002\",\"workflow\":\"CI\"},{\"branch\":\"master\",\"conclusion\":\"success\",\"created_at\":\"2026-06-29T11:41:00Z\",\"duration_seconds\":120,\"event\":\"push\",\"jobs\":[],\"run_number\":33,\"sha\":\"9f8e7d6\",\"title\":\"Refactor shell init\",\"updated_at\":\"2026-06-29T11:43:00Z\",\"url\":\"https://github.com/bbugyi200/dotfiles/actions/runs/2003\",\"workflow\":\"Deploy Docs\"}],\"sha\":\"9f8e7d6\",\"title\":\"Refactor shell init\",\"type\":\"commit\",\"url\":\"https://github.com/bbugyi200/dotfiles/commit/9f8e7d6c5b4a3210\"}\n{\"error\":\"403 Forbidden (token lacks access)\",\"repo\":\"bobs-org/locked\",\"type\":\"repo_error\"}\n```\n\nFor example, to list every repo with a red shown commit:\n\n```sh\nactstat -f jsonl | jq -r 'select(.type==\"commit\" and .conclusion!=\"success\") | .repo'\n```\n\n## Exit codes\n\nMachine output always goes to **stdout**; diagnostics, warnings, and progress go\nto **stderr**, so `actstat list -f json` is always pipe-clean.\n\n| Code | Meaning |\n| --- | --- |\n| `0` | Ran to completion. Commit conclusions are reported, **not** gated — a red commit alone does not change the exit code. |\n| `1` | Operational error: no usable config, config parse error, every inspected repository errored, or a fatal client/runtime error. |\n| `2` | `--fail-on-failure` is set and at least one inspected commit was red. Also returned for a usage error such as a malformed `--repo OWNER/NAME` value. |\n\nBy default `actstat` reports without gating (exit `0`); pass `--fail-on-failure`\nto turn a red commit into a non-zero exit for cron/CI.\n\n## Cronjob recipe\n\n`actstat` is built for unattended use. A typical cron entry runs quietly, and you\nact on the exit code or capture machine output. Cron has a minimal environment,\nso use absolute paths and make the token available — either export one of the\ntoken env vars or rely on `gh` being authenticated for that user.\n\n```cron\n# Every 15 minutes: ping a healthcheck only when all configured repos are green.\n*/15 * * * * GH_TOKEN=ghp_xxx /home/bryan/.cargo/bin/actstat --fail-on-failure -q \u0026\u0026 curl -fsS https://hc-ping.com/your-uuid\n```\n\n```sh\n# Snapshot machine output for later inspection / alerting.\n*/15 * * * * /home/bryan/.cargo/bin/actstat -f jsonl \u003e /var/log/actstat.jsonl 2\u003e\u003e/var/log/actstat.err\n```\n\nWith `--fail-on-failure`, exit `2` means \"something is red\" and exit `1` means\n\"actstat itself couldn't run\" (bad config, no network, total auth failure) — so a\nmonitor can distinguish a broken pipeline from a broken check.\n\n## Troubleshooting\n\n- **\"no actstat config found\"** — no config exists on any discovery path.\n  `actstat` prints a minimal example; create `~/.config/actstat/config.yml` (or\n  point at one with `--config` / `ACTSTAT_CONFIG`).\n- **\"invalid config\"** — the YAML parsed but failed validation (e.g. an entry\n  that is neither `org:` nor `repo:`, or a `repo` that isn't `owner/name`). The\n  message names the offending file.\n- **Rate limited / \"making unauthenticated requests\" warning** — no token was\n  found. Unauthenticated GitHub limits are very low; authenticate via `gh auth\n  login` or set `ACTSTAT_GITHUB_TOKEN` / `GH_TOKEN` / `GITHUB_TOKEN`. Transient\n  rate limits and `5xx`/connection errors are retried with backoff automatically.\n- **Private repos missing, or orgs not fully expanded** — the token lacks scope.\n  Use a token with `repo` (private repos) and `read:org` (org expansion).\n- **A repository shows an error row (`403`/`404`)** — the token can't see it, or\n  it doesn't exist. This is isolated per repository and never aborts the run; the\n  rest of your projects still report.\n- **A repo is missing from output** — it had no qualifying settled commits in\n  the recent default-branch run window. Empty repos are omitted rather than shown\n  as neutral rows.\n- **The newest GitHub commit is absent** — it still has queued or in-progress\n  workflow runs. `actstat` reports the most recent default-branch commit whose\n  workflow runs have all completed.\n- **Use `-v` to diagnose** — add `--verbose` to print the token source and how\n  many repositories are being inspected (on stderr, so stdout stays clean).\n\n## Contributing / development\n\nThe crate is split into a thin binary (`src/main.rs`) and a library (`src/lib.rs`)\nso all logic is unit-testable without spawning a process or touching the network.\nEvery output format renders from one normalized result model\n(`Report → RepoReport → CommitReport → RunReport → JobReport → StepReport`), so\nGitHub-parsing logic lives in exactly one place. HTTP is mocked in tests\n(`wiremock`); no test requires real credentials or network.\n\n```sh\ncargo fmt                                   # format\ncargo clippy --all-targets -- -D warnings   # lint (warnings are errors)\ncargo test                                  # run the test suite\n```\n\nOr, with `just`:\n\n```sh\njust check    # fmt-check + clippy + test (the full pre-commit gate)\n```\n\n## License\n\nMIT. See [`Cargo.toml`](Cargo.toml).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbbugyi200%2Factstat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbbugyi200%2Factstat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbbugyi200%2Factstat/lists"}