Публічний реєстр
Звіт про здоров'я програмного забезпеченнясхема 0.27.0 · метрики 1.13.0 · 2026-07-23 20:30 UTC

anzellai / sky

Sky — an Elm-inspired language that compiles to Go. Hindley-Milner types, server-driven UI (Sky.Live), single binary output.

Go · Haskell · ElmApache-2.0★ 428 зірок⑂ 9 форківз бер. 2026 р.Переглянути на GitHub ↗

anzellai/sky має індекс здоров’я 61 зі 100, що відповідає смузі «Помірний». Найвищий показник — Vitality (83/100), найнижчий — Security (40/100). Останнє оновлення — сьогодні. Більшість нещодавньої роботи виконує один учасник.

61
загалом / 100
Помірний

Індекс здоров'я програмного забезпечення

Метрики згруповано у зважені категорії на шкалі 1–100. Загальна оцінка починається як їхнє середнє; коли публічні дані активують Політику юрисдикцій високого ризику, рейтинг коригується й отримує верхню межу 49 («Під ризиком»). Готовність до ШІ не входить до індексу.

61
Відмінний85-100Зразковий; відповідає практично всім перевіреним критеріям
Добрий70-84Здоровий; незначні прогалини
Помірний50-69Прийнятний, але з помітними прогалинами; рекомендовано перевірку
У зоні ризику30-49Суттєві слабкі місця; впровадження потребує обережності
Критичний1-29Серйозні проблеми (покинутий, єдиний мейнтейнер, без базової гігієни)
ЖиттєздатністьСпільнота тавпровадженняСталість таврядуванняІнженернаякістьБезпекаГотовність доШІ

Профіль оцінок

Кожна вісь — окрема категорія. Форма важить більше, ніж середнє: здоровий об'єкт заповнює всю фігуру, тоді як профіль із піками та провалами означає, що сила в одному вимірі маскує ризик в іншому.

Власність

Anzel LaiОсобистий обліковий запис
26 підписників58 публічних репозиторіївз лист. 2013 р.

Цей репозиторій належить особистому обліковому запису. Проєкт з єдиним власником несе більший ризик безперервності, ніж підтримуваний організацією.

Метрики за категоріями

Життєздатність

Чи живий проєкт — чи пишеться код і чи виходять релізи?

83Добрий · 22% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 0 дн. тому
13.8/36Ритм комітів — 20/52 тижнів із комітами
18/18Обсяг комітів — 1 981 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year1 981
human_commit_share1
days_since_last_push0
active_weeks_last_year20
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 100 релізів
36/36Свіжість релізів — останній реліз 0 дн. тому
27/27Ритм релізів — реліз кожні ~2,2 дн.
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Використані вхідні дані
releases_count100
latest_release_tagv0.17.12
releases_from_tagsні
days_since_latest_release0
mean_days_between_releases2,2

Спільнота та впровадження

Чи має проєкт користувачів, завантаження, увагу та влаштовані умови для контриб’юторів?

65Помірний · 18% загального індексу
Як обчислюється оцінка
42.7/60Зірки — 428 зірок
7.5/25Форки — 9 форків
3.3/15Спостерігачі — 5 спостерігачів
Використані вхідні дані
forks9
stars428
watchers5
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
22.5/22.5Ліцензія — визнана ліцензія (Apache-2.0)
18/18Настанови CONTRIBUTING
0/13.5Кодекс поведінки
0/7.2Шаблон issue
6.3/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseтак
has_contributingтак
has_issue_templateні
has_code_of_conductні
has_pull_request_templateтак

Сталість та врядування

Чи переживе проєкт своїх людей — бас-фактор, реактивність, хто за ним стоїть і як супроводжуються пакети?

45У зоні ризику · 24% загального індексу
Як обчислюється оцінка
9/54Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів
0.2/22.5Розподіл комітів — головний контриб’ютор — автор 99% комітів
5.4/13.5Широта контриб’юторів — 4 контриб’юторів
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Використані вхідні дані
bus_factor1
contributors_sampled4
top_contributor_share0,991
Як обчислюється оцінка
35.5/46.8Вирішення issue — закрито 76% issue
34.3/38.3Прийняття PR — злито 112/125 вирішених PR
0/15OpenSSF Scorecard: Code-Review — Found 1/24 approved changesets -- score normalized to 0
Використані вхідні дані
merged_prs112
open_issues6
closed_issues19
issue_closed_ratio0,76
closed_unmerged_prs13
Як обчислюється оцінка
10/30Підтримка власника — особистий (користувацький) обліковий запис
0/20Верифікований домен — не застосовно до користувацьких облікових записів
10.3/25Охоплення власника — 26 підписників у anzellai
24.9/25Послужний список — 58 публічних репозиторіїв, вік облікового запису ~12 р.
Використані вхідні дані
followers26
owner_typeUser
is_verified
owner_loginanzellai
public_repos58
account_age_days4 619
Виключено з оцінювання (немає даних або не застосовно): Верифікований домен. Залишкові ваги перенормовано.

Інженерна якість

Чи наявні базові інженерні практики та документація?

71Добрий · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 2 процес(ів) CI
24/24Наявні тести
0/16Конфігурація лінтера
0/9.6Pre-commit-хуки
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 13 out of 13 merged PRs checked by a CI test -- score normalized to 10
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigні
has_linter_configні
has_precommit_configні
Як обчислюється оцінка
30/30README
25/25Каталог документації
0/15Сайт документації / домашня сторінка
10/10Опис репозиторію
10/10Теми — 19 тем
0/10Wiki
Використані вхідні дані
topicscompiler, fullstack, functional-programming, go, liveview, lsp, programming-language, server-driven-ui, sse, type-inference, typescript, compiles-to-go, elm-inspired, sky-language, elm, haskell, production-ready-application, sky, sky-lang
has_wikiні
homepage
has_readmeтак
has_docs_dirтак
has_descriptionтак

Безпека

Чи міцні видимі практики безпеки й ланцюга постачання, без непослабленої пов’язаності з юрисдикціями високого ризику?

40У зоні ризику · 16% загального індексу

Стан безпеки

40У зоні ризику
Як обчислюється оцінка
6.8/7.5Binary-Artifacts — binaries present in source code
2.2/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 13 out of 13 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 1/24 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
5/5Fuzzing — project is fuzzed
2.5/2.5Ліцензія — license file detected
7.5/7.5Maintained — 30 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 44 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate4

Готовність до ШІ

Наскільки репозиторій оснащений для розробки та супроводу за участі ШІ-агентів? Незалежний, експериментальний бейдж — вага 0.0, тож він подається окремо і не впливає на загальний індекс здоров'я.

69Помірний · 0% загального індексу
Як обчислюється оцінка
45/45Інструкції для агентів — CLAUDE.md, legacy-sky-compiler/bootstrap/runtime/templates/CLAUDE.md, templates/CLAUDE.md
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 98 з 100 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,98
agent_instruction_filesCLAUDE.md, legacy-sky-compiler/bootstrap/runtime/templates/CLAUDE.md, templates/CLAUDE.md
agent_instruction_max_bytes212 331
Як обчислюється оцінка
12.6/18Розгортання однією командою — legacy-sky-compiler/bootstrap/go.mod, legacy-ts-compiler/interop/go/inspector/go.mod, runtime-go/go.mod (домовленість інструментарію, без раннера задач)
22/22Автоматизовані тести
0/11Конфігурація лінтера / форматера
11/11Статична перевірка типів — legacy-sky-compiler/tsconfig.json
10/10Відтворюване середовище — Dockerfile, Nix, lockfile
2/10Підтверджена практика роботи з агентами — 1 з останніх 100 комітів створено агентом або з його зазначенням
0/8Автоматизоване супроводження — автоматичних оновлень залежностей не виявлено
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Використані вхідні дані
has_nixтак
has_testsтак
lockfilesgo.sum, package-lock.json
has_dockerfileтак
typed_languageтак
bootstrap_files
has_devcontainerні
has_linter_configні
typecheck_configslegacy-sky-compiler/tsconfig.json
agent_commit_share0,01
toolchain_manifestslegacy-sky-compiler/bootstrap/go.mod, legacy-ts-compiler/interop/go/inspector/go.mod, runtime-go/go.mod, tools/sky-ffi-inspect/go.mod
dependency_bot_commit_share0
Як обчислюється оцінка
45/45Типізований код — Go (статично типізована)
53.1/55Керовані розміри файлів — 15/441 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageGo
largest_source_bytes1 488 544
source_files_sampled441
oversized_source_files15
Як обчислюється оцінка
0/40Схема API (OpenAPI/GraphQL/proto)
0/20Сервер MCP
40/40Придатні до запуску приклади — examples
Використані вхідні дані
example_dirsexamples
has_mcp_signalні
api_schema_files

Ключові факти

428зірок GitHub
4контриб'юторів
1 981комітів за останні 12 місяців
0днів від останнього пушу
100релізів
1бас-фактор
6відкритих issue
Go, npmпакетних екосистем

Попередження щодо збору даних

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch npm package 'sky-compiler' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Докладніше

Історія зірок і форків 0 ★ / 9 ⇿
0Зірки
9Форки
30Релізи

Коли додано кожну зірку й форк — зібрано з GitHub і згруповано за днями. Кумулятивне зростання розміщено просто над денними додаваннями, з яких воно складається, тож їх видно одне проти одного: рівномірне органічне накопичення виглядає зовсім інакше, ніж різкий короткочасний сплеск. Там, де цю різницю можна виміряти, її подано як автентичність росту.

0246810922026-032026-042026-05
Мажорні 0Мінорні 1Патчі 29
OpenSSF Scorecard 4.0 / 10
4.0сукупно

Незалежна, не прив'язана до інструментів оцінка безпеки від відкритого проєкту OpenSSF Scorecard. Кожна перевірка винагороджує практику безпеки, а не інструмент конкретного постачальника. Перевірки, які Scorecard не зміг визначити, позначено н/д і виключено з оцінки безпеки (вони ніколи не зараховуються як нуль).Scorecard v5.5.0 · 2026-07-23 20:30 UTC

9Binary-Artifactsbinaries present in source code
3Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests13 out of 13 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 1/24 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
10Fuzzingproject is fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities44 existing vulnerabilities detected
Прямі залежності 34
РеєстрПакетОбмеження версіїМаніфест
npm@types/express^5.0.6legacy-sky-compiler/package.json
npm@types/react^19.2.14legacy-sky-compiler/package.json
npmexpress^5.2.1legacy-sky-compiler/package.json
npmjs-yaml^4.1.1legacy-sky-compiler/package.json
npmkoa^3.1.2legacy-sky-compiler/package.json
npmpostject^1.0.0-alpha.6legacy-sky-compiler/package.json
npmreact^19.2.4legacy-sky-compiler/package.json
npmsmol-toml^1.6.0legacy-sky-compiler/package.json
npmvscode-languageserver^9.0.1legacy-sky-compiler/package.json
npmvscode-languageserver-textdocument^1.0.12legacy-sky-compiler/package.json
Gogithub.com/BurntSushi/tomlv1.5.0runtime-go/go.mod
Gogithub.com/alicebob/miniredis/v2v2.37.0runtime-go/go.mod
Gogithub.com/coder/websocketv1.8.14runtime-go/go.mod
Gogithub.com/golang-jwt/jwt/v5v5.2.1runtime-go/go.mod
Gogithub.com/google/uuidv1.6.0runtime-go/go.mod
Gogithub.com/hashicorp/golang-lru/v2v2.0.7runtime-go/go.mod
Gogithub.com/jackc/pgx/v5v5.9.1runtime-go/go.mod
Gogithub.com/klauspost/compressv1.17.11runtime-go/go.mod
Gogithub.com/redis/go-redis/v9v9.18.0runtime-go/go.mod
Gogithub.com/rivo/unisegv0.4.7runtime-go/go.mod
Gogithub.com/shopspring/decimalv1.4.0runtime-go/go.mod
Gogithub.com/webview/webview_gov0.0.0-20240831120633-6173450d4dd6runtime-go/go.mod
Gogo.opentelemetry.io/otelv1.43.0runtime-go/go.mod
Gogo.opentelemetry.io/otel/exporters/otlp/otlptracev1.43.0runtime-go/go.mod
Gogo.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttpv1.43.0runtime-go/go.mod
Gogo.opentelemetry.io/otel/sdkv1.43.0runtime-go/go.mod
Gogo.opentelemetry.io/otel/tracev1.43.0runtime-go/go.mod
Gogo.opentelemetry.io/proto/otlpv1.10.0runtime-go/go.mod
Gogolang.org/x/cryptov0.49.0runtime-go/go.mod
Gogolang.org/x/termv0.43.0runtime-go/go.mod
Gogolang.org/x/textv0.36.0runtime-go/go.mod
Gogoogle.golang.org/protobufv1.36.11runtime-go/go.mod
Gogopkg.in/yaml.v3v3.0.1runtime-go/go.mod
Gomodernc.org/sqlitev1.34.1runtime-go/go.mod
Усі залежності не зібрано

Не вдалося зібрати розв'язаний набір залежностей для цього звіту: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Звіт у форматі JSON машиночитний
{
  "data": {
    "repo": {
      "topics": [
        "compiler",
        "fullstack",
        "functional-programming",
        "go",
        "liveview",
        "lsp",
        "programming-language",
        "server-driven-ui",
        "sse",
        "type-inference",
        "typescript",
        "compiles-to-go",
        "elm-inspired",
        "sky-language",
        "elm",
        "haskell",
        "production-ready-application",
        "sky",
        "sky-lang"
      ],
      "is_fork": false,
      "size_kb": 270670,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "Go": 6060756,
        "Elm": 2003883,
        "Lua": 30554,
        "Nix": 2876,
        "Shell": 161461,
        "Haskell": 4670191,
        "Dockerfile": 2586,
        "JavaScript": 267318,
        "TypeScript": 916702
      },
      "pushed_at": "2026-07-23T18:23:23Z",
      "created_at": "2026-03-10T18:45:31Z",
      "owner_type": "User",
      "updated_at": "2026-07-23T20:25:40Z",
      "description": "Sky — an Elm-inspired language that compiles to Go. Hindley-Milner types, server-driven UI (Sky.Live), single binary output.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Go",
      "significant_languages": [
        "Go",
        "Haskell",
        "Elm"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Anzel Lai",
      "type": "User",
      "login": "anzellai",
      "company": null,
      "location": "United Kingdom",
      "followers": 26,
      "avatar_url": "https://avatars.githubusercontent.com/u/6062697?v=4",
      "created_at": "2013-11-29T00:28:01Z",
      "is_verified": null,
      "public_repos": 58,
      "account_age_days": 4619
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.17.12",
          "kind": "patch",
          "published_at": "2026-07-23T15:28:26Z"
        },
        {
          "tag": "v0.17.11",
          "kind": "patch",
          "published_at": "2026-07-21T19:14:15Z"
        },
        {
          "tag": "v0.17.10",
          "kind": "patch",
          "published_at": "2026-07-17T23:45:01Z"
        },
        {
          "tag": "v0.17.9",
          "kind": "patch",
          "published_at": "2026-07-15T21:52:46Z"
        },
        {
          "tag": "v0.17.8",
          "kind": "patch",
          "published_at": "2026-07-05T12:43:55Z"
        },
        {
          "tag": "v0.17.7",
          "kind": "patch",
          "published_at": "2026-07-05T01:38:52Z"
        },
        {
          "tag": "v0.17.6",
          "kind": "patch",
          "published_at": "2026-07-04T19:55:44Z"
        },
        {
          "tag": "v0.17.5",
          "kind": "patch",
          "published_at": "2026-07-04T17:07:48Z"
        },
        {
          "tag": "v0.17.4",
          "kind": "patch",
          "published_at": "2026-07-04T09:40:36Z"
        },
        {
          "tag": "v0.17.3",
          "kind": "patch",
          "published_at": "2026-07-03T19:30:34Z"
        },
        {
          "tag": "v0.17.2",
          "kind": "patch",
          "published_at": "2026-07-02T14:21:21Z"
        },
        {
          "tag": "v0.17.1",
          "kind": "patch",
          "published_at": "2026-07-02T02:20:26Z"
        },
        {
          "tag": "v0.17.0",
          "kind": "minor",
          "published_at": "2026-07-01T17:16:53Z"
        },
        {
          "tag": "v0.16.29",
          "kind": "patch",
          "published_at": "2026-06-11T17:40:28Z"
        },
        {
          "tag": "v0.16.28",
          "kind": "patch",
          "published_at": "2026-06-11T17:08:30Z"
        },
        {
          "tag": "v0.16.27",
          "kind": "patch",
          "published_at": "2026-06-11T15:40:06Z"
        },
        {
          "tag": "v0.16.26",
          "kind": "patch",
          "published_at": "2026-06-11T11:49:01Z"
        },
        {
          "tag": "v0.16.25",
          "kind": "patch",
          "published_at": "2026-06-11T09:29:33Z"
        },
        {
          "tag": "v0.16.24",
          "kind": "patch",
          "published_at": "2026-06-10T23:36:58Z"
        },
        {
          "tag": "v0.16.23",
          "kind": "patch",
          "published_at": "2026-06-10T21:08:45Z"
        },
        {
          "tag": "v0.16.22",
          "kind": "patch",
          "published_at": "2026-06-10T17:05:48Z"
        },
        {
          "tag": "v0.16.20",
          "kind": "patch",
          "published_at": "2026-06-10T16:12:01Z"
        },
        {
          "tag": "v0.16.19",
          "kind": "patch",
          "published_at": "2026-06-10T08:57:36Z"
        },
        {
          "tag": "v0.16.18",
          "kind": "patch",
          "published_at": "2026-06-09T23:27:03Z"
        },
        {
          "tag": "v0.16.17",
          "kind": "patch",
          "published_at": "2026-06-09T17:19:06Z"
        },
        {
          "tag": "v0.16.16",
          "kind": "patch",
          "published_at": "2026-06-09T12:54:12Z"
        },
        {
          "tag": "v0.16.15",
          "kind": "patch",
          "published_at": "2026-06-09T10:39:44Z"
        },
        {
          "tag": "v0.16.14",
          "kind": "patch",
          "published_at": "2026-06-08T20:53:21Z"
        },
        {
          "tag": "v0.16.13",
          "kind": "patch",
          "published_at": "2026-06-08T11:16:41Z"
        },
        {
          "tag": "v0.16.11",
          "kind": "patch",
          "published_at": "2026-06-07T11:23:41Z"
        },
        {
          "tag": "v0.16.10",
          "kind": "patch",
          "published_at": "2026-06-06T15:47:48Z"
        },
        {
          "tag": "v0.16.9",
          "kind": "patch",
          "published_at": "2026-06-06T13:24:00Z"
        },
        {
          "tag": "v0.16.8",
          "kind": "patch",
          "published_at": "2026-06-06T12:50:55Z"
        },
        {
          "tag": "v0.16.7",
          "kind": "patch",
          "published_at": "2026-06-06T10:44:24Z"
        },
        {
          "tag": "v0.16.6",
          "kind": "patch",
          "published_at": "2026-06-05T23:27:49Z"
        },
        {
          "tag": "v0.16.5",
          "kind": "patch",
          "published_at": "2026-06-05T21:21:35Z"
        },
        {
          "tag": "v0.16.4",
          "kind": "patch",
          "published_at": "2026-06-05T17:42:00Z"
        },
        {
          "tag": "v0.16.3",
          "kind": "patch",
          "published_at": "2026-06-04T16:13:29Z"
        },
        {
          "tag": "v0.16.2",
          "kind": "patch",
          "published_at": "2026-06-04T10:37:40Z"
        },
        {
          "tag": "v0.16.1",
          "kind": "patch",
          "published_at": "2026-06-03T23:59:03Z"
        },
        {
          "tag": "v0.16.0",
          "kind": "minor",
          "published_at": "2026-06-03T00:01:04Z"
        },
        {
          "tag": "v0.15.59",
          "kind": "patch",
          "published_at": "2026-06-02T16:47:30Z"
        },
        {
          "tag": "v0.15.58",
          "kind": "patch",
          "published_at": "2026-06-02T13:45:17Z"
        },
        {
          "tag": "v0.15.57",
          "kind": "patch",
          "published_at": "2026-06-02T13:43:16Z"
        },
        {
          "tag": "v0.15.56",
          "kind": "patch",
          "published_at": "2026-06-02T06:31:38Z"
        },
        {
          "tag": "v0.15.55",
          "kind": "patch",
          "published_at": "2026-06-01T21:18:55Z"
        },
        {
          "tag": "v0.15.54",
          "kind": "patch",
          "published_at": "2026-06-01T14:14:30Z"
        },
        {
          "tag": "v0.15.53",
          "kind": "patch",
          "published_at": "2026-06-01T11:30:53Z"
        },
        {
          "tag": "v0.15.51",
          "kind": "patch",
          "published_at": "2026-06-01T09:26:06Z"
        },
        {
          "tag": "v0.15.50",
          "kind": "patch",
          "published_at": "2026-06-01T03:47:48Z"
        },
        {
          "tag": "v0.15.49",
          "kind": "patch",
          "published_at": "2026-06-01T02:52:15Z"
        },
        {
          "tag": "v0.15.48",
          "kind": "patch",
          "published_at": "2026-06-01T01:16:27Z"
        },
        {
          "tag": "v0.15.47",
          "kind": "patch",
          "published_at": "2026-05-31T23:46:21Z"
        },
        {
          "tag": "v0.15.46",
          "kind": "patch",
          "published_at": "2026-05-31T22:46:54Z"
        },
        {
          "tag": "v0.15.45",
          "kind": "patch",
          "published_at": "2026-05-31T21:33:07Z"
        },
        {
          "tag": "v0.15.44",
          "kind": "patch",
          "published_at": "2026-05-31T19:39:35Z"
        },
        {
          "tag": "v0.15.43",
          "kind": "patch",
          "published_at": "2026-05-31T15:50:43Z"
        },
        {
          "tag": "v0.15.42",
          "kind": "patch",
          "published_at": "2026-05-31T14:46:38Z"
        },
        {
          "tag": "v0.15.41",
          "kind": "patch",
          "published_at": "2026-05-31T10:40:03Z"
        },
        {
          "tag": "v0.15.40",
          "kind": "patch",
          "published_at": "2026-05-31T07:51:57Z"
        },
        {
          "tag": "v0.15.39",
          "kind": "patch",
          "published_at": "2026-05-31T06:31:54Z"
        },
        {
          "tag": "v0.15.38",
          "kind": "patch",
          "published_at": "2026-05-31T05:27:31Z"
        },
        {
          "tag": "v0.15.37",
          "kind": "patch",
          "published_at": "2026-05-31T04:24:54Z"
        },
        {
          "tag": "v0.15.36",
          "kind": "patch",
          "published_at": "2026-05-31T02:56:37Z"
        },
        {
          "tag": "v0.15.35",
          "kind": "patch",
          "published_at": "2026-05-31T01:04:02Z"
        },
        {
          "tag": "v0.15.34",
          "kind": "patch",
          "published_at": "2026-05-30T23:59:26Z"
        },
        {
          "tag": "v0.15.33",
          "kind": "patch",
          "published_at": "2026-05-30T23:12:19Z"
        },
        {
          "tag": "v0.15.32",
          "kind": "patch",
          "published_at": "2026-05-30T21:19:45Z"
        },
        {
          "tag": "v0.15.31",
          "kind": "patch",
          "published_at": "2026-05-30T20:11:15Z"
        },
        {
          "tag": "v0.15.30",
          "kind": "patch",
          "published_at": "2026-05-30T09:45:24Z"
        },
        {
          "tag": "v0.15.29",
          "kind": "patch",
          "published_at": "2026-05-29T23:11:07Z"
        },
        {
          "tag": "v0.15.28",
          "kind": "patch",
          "published_at": "2026-05-29T09:29:19Z"
        },
        {
          "tag": "v0.15.27",
          "kind": "patch",
          "published_at": "2026-05-28T21:12:49Z"
        },
        {
          "tag": "v0.15.26",
          "kind": "patch",
          "published_at": "2026-05-27T22:33:07Z"
        },
        {
          "tag": "v0.15.25",
          "kind": "patch",
          "published_at": "2026-05-27T19:55:54Z"
        },
        {
          "tag": "v0.15.24",
          "kind": "patch",
          "published_at": "2026-05-27T18:12:24Z"
        },
        {
          "tag": "v0.15.23",
          "kind": "patch",
          "published_at": "2026-05-27T13:40:35Z"
        },
        {
          "tag": "v0.15.22",
          "kind": "patch",
          "published_at": "2026-05-27T11:00:38Z"
        },
        {
          "tag": "v0.15.21",
          "kind": "patch",
          "published_at": "2026-05-27T08:13:34Z"
        },
        {
          "tag": "v0.15.20",
          "kind": "patch",
          "published_at": "2026-05-27T03:27:30Z"
        },
        {
          "tag": "v0.15.19",
          "kind": "patch",
          "published_at": "2026-05-27T01:14:33Z"
        },
        {
          "tag": "v0.15.18",
          "kind": "patch",
          "published_at": "2026-05-26T22:38:53Z"
        },
        {
          "tag": "v0.15.17",
          "kind": "patch",
          "published_at": "2026-05-26T19:36:29Z"
        },
        {
          "tag": "v0.15.16",
          "kind": "patch",
          "published_at": "2026-05-26T18:30:26Z"
        },
        {
          "tag": "v0.15.15",
          "kind": "patch",
          "published_at": "2026-05-26T17:48:19Z"
        },
        {
          "tag": "v0.15.14",
          "kind": "patch",
          "published_at": "2026-05-26T17:36:29Z"
        },
        {
          "tag": "v0.15.13",
          "kind": "patch",
          "published_at": "2026-05-26T14:32:43Z"
        },
        {
          "tag": "v0.15.12",
          "kind": "patch",
          "published_at": "2026-05-26T13:53:12Z"
        },
        {
          "tag": "v0.15.11",
          "kind": "patch",
          "published_at": "2026-05-26T02:07:07Z"
        },
        {
          "tag": "v0.15.10",
          "kind": "patch",
          "published_at": "2026-05-26T01:55:26Z"
        },
        {
          "tag": "v0.15.9",
          "kind": "patch",
          "published_at": "2026-05-25T22:23:12Z"
        },
        {
          "tag": "v0.15.8",
          "kind": "patch",
          "published_at": "2026-05-25T20:26:40Z"
        },
        {
          "tag": "v0.15.7",
          "kind": "patch",
          "published_at": "2026-05-25T18:47:49Z"
        },
        {
          "tag": "v0.15.6",
          "kind": "patch",
          "published_at": "2026-05-25T17:55:32Z"
        },
        {
          "tag": "v0.15.5",
          "kind": "patch",
          "published_at": "2026-05-25T10:03:58Z"
        },
        {
          "tag": "v0.15.4",
          "kind": "patch",
          "published_at": "2026-05-25T05:10:35Z"
        },
        {
          "tag": "v0.15.3",
          "kind": "patch",
          "published_at": "2026-05-25T03:24:36Z"
        },
        {
          "tag": "v0.15.2",
          "kind": "patch",
          "published_at": "2026-05-24T22:06:11Z"
        },
        {
          "tag": "v0.15.1",
          "kind": "patch",
          "published_at": "2026-05-24T20:38:38Z"
        },
        {
          "tag": "v0.15.0",
          "kind": "minor",
          "published_at": "2026-05-24T19:51:17Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "e422ce9b317e31c7b1a5eabfa46bb3f4de6a3518",
          "body": "Port of the runtime half of the rewrite-branch fix. The per-session SSE\nsupersede made two live tabs of one session ping-pong reconnecting (EventSource\nauto-reconnects when a 200 stream ends gracefully), so it is reverted. The\nclient-side per-tab bounding (idempotent __skyOpenSSE + release-on-pagehide)\nis retained and unaffected. Found by pre-merge adversarial review.",
          "is_bot": false,
          "headline": "fix(rt): revert SSE per-session supersede (multi-tab ping-pong)",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-23T18:23:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b490429f4bb4e2050166dea0aa21972d30908f0a",
          "body": "Fixes a browser connection-pool exhaustion hang and hardens SSE for many\nconcurrent users. Symptom: on an app that navigates via full-page loads (a\nfresh SSE per page), rapid clicking piled up EventSource connections until the\nbrowser's ~6-per-host HTTP/1.1 limit was hit and the whole tab froze (spi\n[…]\nession supersedes the\nprior one server-side; full nav sequence runs with a single SSE, no hang.\nRegressions: TestSseOpenIsIdempotentAndClosesOnUnload +\nTestSSESupersedesPreviousConnection. Race-clean.",
          "is_bot": false,
          "headline": "fix(rt): make Sky.Live SSE connection handling robust + scalable",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-23T17:10:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ad083bd70f5fd214ae71d2c7776598e79772a793",
          "body": "…ustness)\n\nnewSQLiteStore only set PRAGMA journal_mode=WAL — it was missing the\nconcurrency hardening Db.connect got in v0.17.10. Two consequences under the\nSky.Live load pattern (every request reads + writes the session):\n\n- its default unbounded pool opened many modernc connections against one WAL\n[…]\nrified: a second\ninstance on the same sessions.db now opens sqlite cleanly (was 'out of\nmemory (14)'); nav load shows no stall; sessions persist. Regression:\nTestSqliteStoreOpensUnderConcurrentHandle.",
          "is_bot": false,
          "headline": "fix(rt): harden Sky.Live sqlite session store (concurrency + lock rob…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-23T16:26:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2457fbd35ab9f5caea2668f176aaa3d05a0dee2e",
          "body": "Follow-up to the push-before-patch fix: harden it so the double-push is\nSTRUCTURALLY impossible, not just avoided by ordering. __skyRunPaths (the\ndata-sky-path URL sync) now takes an explicit push intent:\n\n  - __skyPatch (full-body: sky-nav click / popstate / mount) → push=false:\n    the URL is alre\n[…]\nlobber. Playwright-verified end to end:\nsky-nav links, parameterized routes, programmatic Navigate, and Back/Forward\nall correct; +1 history entry per nav. Regression:\nTestSkyRunPathsIntentIsExplicit.",
          "is_bot": false,
          "headline": "refactor(rt): make sky-nav history intent explicit (order-independent)",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-23T14:51:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "21755498addc33492e51a6e15d6a8a3b8d74c7d8",
          "body": "An app using BOTH sky-nav links AND a data-sky-path urlSync element (the\ndocumented URL-from-Page pattern) got TWO history entries per navigation, so\nthe browser Back button needed two presses to move one page — page transitions\nlooked stuck/broken.\n\nRoot cause: the sky-nav click handler ran __skyPa\n[…]\nterized route +\nprogrammatic Navigate): each nav now adds exactly one history entry and Back/\nForward walk correctly. Shared runtime — fixes both compilers. Regression:\nTestSkyNavPushesUrlBeforePatch.",
          "is_bot": false,
          "headline": "fix(rt): sky-nav must push URL before patching (double-history-push bug)",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-23T14:51:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aeb51ef67eddc13925ea6a92f7e1ce94b6bed0be",
          "body": "`sky test` was only printing the final summary line because\n`summarise` (in sky-stdlib/Sky/Test.sky) used `List.map` with\n`println` — that produces `List (Task Error ())` whose thunks\nare never forced. `let _ = TaskExpr` auto-force only fires when\nthe RHS is a single Task, not a list of them.\n\nRepor\n[…]\niled (4 total)\n\nSame fix applied to both the passing-tests and failing-tests\nprint loops. Verified locally with a 3-test module (2 pass, 1\nfail) — output matches, exit code 1 on failure.\n\nCloses #151.",
          "is_bot": false,
          "headline": "fix(#151): sky test now prints per-test names + failure details (#152)",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-21T18:59:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e858cd903fa74a6fd617b897a45ca647206f1c4f",
          "body": "…ut + single-conn) (#150)\n\n* fix(#659-follow): Sky.Live client resyncs on missing patch target\n\nUnder load, a race between the initial POST response's HTML patch\n(which materialises conditionally-rendered elements like an error\n`<p>`) and a follow-up SSE `event: patches` (targeting one of the\nnewly-\n[…]\nBUSY, all 200 rows\nland.\n\nCompanion fix: anzellai/sky-diagram#1 (WAL PRAGMA + busy_timeout in\nsky-diagram's own initSchema) — becomes redundant once this lands\nbut harmless to keep as belt-and-braces.",
          "is_bot": false,
          "headline": "fix: Db.connect applies SQLite concurrency defaults (WAL + busy_timeo…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-17T22:24:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e8730abc5c091c258d6903c21d5645b2eb7f4acc",
          "body": "Under load, a race between the initial POST response's HTML patch\n(which materialises conditionally-rendered elements like an error\n`<p>`) and a follow-up SSE `event: patches` (targeting one of the\nnewly-materialised sky-ids) can produce a client where the patch\ntarget sky-id isn't yet in the DOM. O\n[…]\nt-fix: SSE reopens, next\nbody carries the notice text. Users see the error, not a halt.\n\nTests: `CGO_ENABLED=0 go test ./rt/ -run 'TestClient|Patch|Apply|SSE'`\ngreen. Full example sweep gated pre-tag.",
          "is_bot": false,
          "headline": "fix(#659-follow): Sky.Live client resyncs on missing patch target (#149)",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-17T21:07:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9f5e3135094d97244cc959a0cd88688f978c73d3",
          "body": "Ships v0.17.9 — reliable LSP for every editor + macOS cabal-test unblocked\n+ dead-code cleanup on the v0.17 crit3 close path.\n\n## Compiler soundness (#644)\n\n- Delete dead `phaseAFallback` function (0 callers since the v0.17 iter\n  17b architectural close).  −55 LOC on `Compile.hs`, zero behaviour\n  \n[…]\nnding\n  (identical to baseline).\n- Example sweep: 26/26 pass after every LSP commit.\n- LSP nvim integration: 17/17 tests pass on the final commit.\n- CI: both platforms fully green on the merge commit.",
          "is_bot": false,
          "headline": "v0.17.9: LSP hardening + macOS ld64 fix + crit3 close",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-15T19:14:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9b0ef22c4d9ffb876c5c208c6ceeb13e6c1a51b6",
          "body": "…emoval) (#147)\n\nPhase 3 migrates the ~500 LOC string-anchor post-pass in app/Main.hs\ninto AST-driven drain hooks in Sky.Format.Format.  Every own-line\ncomment now routes through a semantic boundary:\n\n  * top-decl boundary (drainBefore col 0)\n  * value body (drainBefore bodyCol)\n  * let-def + let-bo\n[…]\ns)\n  * Net: -346 lines, single source of truth for comment placement.\n\n\nClaude-Session: https://claude.ai/code/session_013PZXpgCdbQ3A1eSwxCqAQZ\n\nCo-authored-by: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(fmt): #144 Phase 3 — delete preserveTopLevelComments (~500 LOC r…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-05T12:32:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "068cfa0f59d554603538e9de656ea28bd6779db2",
          "body": "…v0.17.8 groundwork) (#146)\n\n* feat(fmt): #144 Phase 1 — tag comments with kind + position at parse time\n\nGroundwork for the AST-driven comment placement rewrite tracked in\ndocs/v0.17-roadmap/fmt-ast-comments.md.  Behavior is intentionally\nunchanged in this commit; the existing string-level post-pro\n[…]\nanchor code.  The\nsentinel-based skip machinery already makes the legacy path a\nno-op for AST-emitted comments, so Phase 3 is mostly a code\ndeletion pass.\n\nRefs: docs/v0.17-roadmap/fmt-ast-comments.md",
          "is_bot": false,
          "headline": "feat(fmt): #144 Phase 1 — parser tags comments with kind + position (…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-05T01:27:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2b0136b100b05544db881787d2fb67dcebfcb2a6",
          "body": "…(#145)\n\nTwo orthogonal issues surfaced against v0.17.5:\n\n1. `sky fmt <file>` used to check `SKY_FMT_FORCE` only in `--stdin`\n   mode. In file mode the refusal was unconditional — the escape\n   hatch the message advertised was a no-op. Both branches now\n   honour the same contract: force=set → write\n[…]\n \"SKY_FMT_FORCE=1: wrote formatted output despite\"\n\n16/16 fmt-suite specs green.\n\nCloses half of #144 (SKY_FMT_FORCE + message clarity); the\nlambda-body comment-drop root cause tracked as a follow-up.",
          "is_bot": false,
          "headline": "fix(#144): sky fmt file mode honours SKY_FMT_FORCE + clearer message …",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-05T00:17:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "45c2da4c83381f2a48fa6f33fac2f338b46c48a5",
          "body": "…#143)\n\nThe legacy HTML shell path (MountConsoleEndpoints in\nruntime-go/rt/console.go:191) gated only on `SKY_CONSOLE_AUTH=off`,\nignoring `productionFromEnv()`.  When the inline path\n(MountEmbeddedConsole) correctly declined under the\n`consoleAuthModeUnsetProd` arm — ENV=production AND SKY_CONSOLE_A\n[…]\n default (ENV=production + no SKY_CONSOLE_AUTH) should\nalready have closed the console.\n\nFull runtime-go test suite: green (rt / console_app / hub / jobs /\ntelemetry all pass).\n\nFixes anzellai/sky#142",
          "is_bot": false,
          "headline": "fix(#142): MountConsoleEndpoints honours production+unset auth gate (…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-04T19:44:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "721a93772129e5d066c85ae85a31017bdedf0386",
          "body": "… docs (#141)\n\nRefinement pass after PR #139 (explicit-alias-wins) shipped.\nConsolidates the duplicated qualifier-suppression logic from\n'processImport' + 'detectImportAliasCollisions' into two named\nhelpers, and documents the rule in CLAUDE.md.\n\n* 'buildExplicitAliasClaims :: [Src.Import] -> Map.Ma\n[…]\nport qualifier rules AND the runtime\n  auto-force of Task-typed main (from PR #140) in a new CLAUDE.md\n  section, so future readers understand both semantic changes\n  without diving into the compiler.",
          "is_bot": false,
          "headline": "refactor(canonicalise): shared helpers for explicit-alias-wins rule +…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-04T16:56:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a7de850c4c0efcddf563e725d6240c0945021260",
          "body": "…er (#139)\n\nBefore this change, the qualifier collision gate (task #347, D5)\nrejected the following shape as E1001:\n\n    import Std.Db as Db          -- explicit Db → Std.Db\n    import Lib.Db exposing (conn) -- last-segment default: Db → Lib.Db\n\nBoth imports auto-registered the qualifier `Db`, one v\n[…]\ntream projects hit by v0.17.4 revert their\n`import Lib.Db as LibDb exposing (conn)` workaround to plain\n`import Lib.Db exposing (conn)` — nothing HAS to change, but the\nworkaround is no longer forced.",
          "is_bot": false,
          "headline": "feat(canonicalise): explicit alias wins over bare-import auto-qualifi…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-04T13:51:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "02116560303ca04fc2373b7d1ac49ef3715f63b6",
          "body": "…140)\n\nThe runtime auto-runs a Task-typed `main` — the generated entry wraps the\nmain body's tail in `rt.AnyTaskRun` — so a trailing `<app> |> Task.run` is a\nno-op at the program entry. It has been redundant since the task-everywhere\nauto-force, and the Sky.Live examples already omit it; these Tui /\n[…]\n` force in\n24 and 38) are left untouched. 24 dispatches on args, so both of its backend\nbranches shed the trailing `Task.run`.\n\nVerified: all seven examples build and run identically before and after.",
          "is_bot": false,
          "headline": "examples: drop redundant trailing `Task.run` from app entry points (#…",
          "author_name": "Arthur",
          "author_login": "arthurmaciel",
          "committed_at": "2026-07-04T13:51:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1e8e39937377aad8bc273f1a8c71e9025f3a67ee",
          "body": "…#138)\n\n* fix(canonicalise): E1001 diagnostic detects pre-existing alias line\n\nThe dual-import qualifier collision gate (task #347, D5) correctly\nrejects `import Std.Db as Db` + `import Lib.Db exposing (conn)` — two\ndifferent modules end up mapping from qualifier `Db` (the second via\nits last-segmen\n[…]\n\"re-registers\" explanation of why the bare exposing collides\n\nAlso asserts diagnostic code E1001 so filter-by-code stays honest.\n\nRuns alongside the existing 40 LSP DiagnosticsSpec cases; 41/41 green.",
          "is_bot": false,
          "headline": "fix(canonicalise): E1001 diagnostic detects pre-existing alias line (…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-03T22:30:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bf0bdf5b2e404e92ada5a2747e6371f29822b69a",
          "body": "- Header + Current state pointer to v0.17.3.\n- State-table gets three new rows: LSP FFI-alias fix, 5-round\n  fixpoint for cross-module externals, Neovim LSP integration\n  suite gate (17/17).\n- Sweep count updated to 40 examples + 981 cabal + 17 LSP.\n\nMerge commit: fee3f8f9 (PR #137).  CI green on both macos-latest\nand ubuntu-latest.",
          "is_bot": false,
          "headline": "docs(v0.17.3): bump CLAUDE.md — LSP cross-module externals gap close",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-03T19:18:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fee3f8f9df6b35698e3a61ceb60cbfb3aafa634b",
          "body": "fix(lsp): FFI-alias false-positive + cross-module externals gap (v0.17.3)",
          "is_bot": false,
          "headline": "Merge pull request #137 from anzellai/fix/lsp-ffi-alias-false-positive",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-03T18:08:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e356ef76e97da3f393a6001e8c8e594266251331",
          "body": "Revert the AppCfg.view tightening (Html → Html msg) from 1022bcc7 and\nthe ripple fixes:\n\n- sky-stdlib/Std/Webview.sky: back to view : model -> Html\n- examples/31-webview-stopwatch-ui: back to view : Model -> Html\n- test/Sky/Build/WebviewAppSpec.hs (2 fixtures): back to Html\n- test/Sky/Build/WebviewL\n[…]\ne stays as it was — this is a documented compromise not a bug.\n\nAll other LSP fixes (Compile.hs 5-round fixpoint, Server.hs FFI seed,\nTH re-embed marker) stay shipped.  Cabal test still lands 981/0/6.",
          "is_bot": false,
          "headline": "revert(webview): keep original nullary Html signature per user direction",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-03T18:04:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c49aeab6162ac965b348ff73a0ea5f6c6205ff01",
          "body": "…ening)\n\nThe stdlib fix at 1022bcc7 tightened @Std.Webview.AppCfg.view@ from\n@view : model -> Html@ (nullary) to @view : model -> Html msg@.  Two\ncabal specs still carried the pre-tightening fixture shape and started\nfailing at the \"type-checks + builds\" gate with:\n\n    expected: AppCfg (Model) Msg\n\n[…]\nelds, type names, functions,\nconstructors, lambda params, case patterns, let bindings).\n\n- test/Sky/Build/WebviewAppSpec.hs      (2 sig fixes)\n- test/Sky/Build/WebviewLoopbackAssetsSpec.hs (1 sig fix)",
          "is_bot": false,
          "headline": "test(webview): update spec fixtures to Html Msg (matches stdlib tight…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-03T17:27:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3e41ead1aafe055e6ac3c29f0787d3dd4e9ba916",
          "body": "The Compile.hs edits from 1022bcc7 (LSP fixpoint) plus the\nsky-stdlib/Std/Webview.sky edit changed the embedded stdlib\ncontents.  cabal's TH walk via qAddDependentFile only tracks\nfiles that were ALREADY in the last splice — same class as the\n2026-06-02d-v2 marker.  Without touching this file, the s\n[…]\npost the\nprevious marker (2026-06-12b-532).  Touching this marker\nre-triggers the walk, which now catches Transform.sky plus the\nWebview.sky edit.\n\nVerified: example sweep 26/26 clean after this bump.",
          "is_bot": false,
          "headline": "build(compiler): touch re-embed marker to force stdlib TH re-scan",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-03T17:00:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1022bcc7a37ea6c7f0923a26f824440d56d1dae0",
          "body": "module externals gap\n\nFollow-up to 48ebcf2f (FFI-alias false-positive fix).  The fleet\nsweep exposed three LSP-only \"Type mismatch\" false positives on\nexamples that build clean under fresh `sky check`:\n\n- 08-notes-app L51 — `expected: String / actual: List a` on\n  `Db.exec sql []` where the local `L\n[…]\n examples: clean.\n- The LSP fleet-sweep script was renamed\n  `scripts/lsp-fleet-sweep.js` → `.cjs` (project package.json\n  declares \"type\": \"module\"; the CommonJS shim needs the\n  explicit extension).",
          "is_bot": false,
          "headline": "fix(lsp): 5-round bounded canonicalise+solve fixpoint closes cross-",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-03T16:49:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "48ebcf2f911a875fa54dd44723610eb875b324d8",
          "body": "diagnostics resolve Go FFI aliases\n\nFollow-up to the previous commit (Compile.hs typecheckWorkspace fix).\nThat was necessary but not sufficient — the LSP's per-file diagnostic\npass runs through `runPipelineSt` at `Lsp/Server.hs:1280`, which had\nits OWN `Canonicalise.canonicaliseWithDeps depInfo Map.\n[…]\now-up.\n- 1 example probe timeout is a fleet-driver timing artifact, not\n  a compiler regression (skyshop directly verified elsewhere).\n- Cabal test 981/0/6 PASS (baseline).\n- Example sweep 26/26 PASS.",
          "is_bot": false,
          "headline": "fix(lsp): seed FFI kernel maps in runPipelineSt so per-file",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-03T15:39:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "934930506ad72eac6a551dd7a1d3d6006dace9b9",
          "body": "qualified calls resolve\n\nThe LSP's `typecheckWorkspace` had been calling\n`Canonicalise.canonicaliseWithDeps depInfoMap Map.empty Map.empty srcMod`\n— explicitly discarding the FFI maps loaded four lines above via\n`_ <- loadAndSeedFfiRegistry`. Result: `Env._qualVars[\"<FfiAlias>\"]`\nwas empty during LS\n[…]\non skyshop pre-fix:\n  echo \"…\" | sky lsp against examples/13-skyshop/src/Lib/Auth.sky\n  → L62:C22 \"Undefined name: Option.withCredentialsFile\"\n\nPost-fix: no diagnostic — matches `sky check` semantics.",
          "is_bot": false,
          "headline": "fix(lsp): seed FFI kernel maps in typecheckWorkspace so Go FFI",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-03T14:59:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ac678df7e81d351e69d24faa4ae3fb7268755542",
          "body": "SkyDeploy is still in private beta — pull the mentions from the\ntop-level user-facing surfaces:\n\n- README.md: drop the header-line link, the 'deploy with SkyDeploy'\n  bullet in the pitch section, and the 'Deploy to GCP Cloud Run via\n  SkyDeploy' line in the deployment paragraph. Deploy paths kept\n  \n[…]\nocs/archive/, docs/v0.17/, and\ndocs/v0.16.x-console/ still mention SkyDeploy — those are internal\nhistory / roadmap docs, not on the reader's discovery path from\nREADME. Can scrub those too if wanted.",
          "is_bot": false,
          "headline": "docs: remove public SkyDeploy references (private beta)",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-03T09:32:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "775dc85921cca90cfc9c49727da7c66d37f17b81",
          "body": "Header + state-table row for the coerceCallArgsAt identity-recovery\ngate. Appends full CLOSED entry to the 'Closed in v0.17' section:\nroot cause (identityRecovered pinning α-renamed T9000-space synth-vars\nback to themselves, skipping the erase-scoped fallback), the one-line\nfix (enclosingTypeParamInScopeCtx guard at Compile.hs:16743), and the\nverification numbers (981/0/6 cabal, 26/26 sweep, skydeploy Editor_view\nclean, #521 fixture non-regression preserved).",
          "is_bot": false,
          "headline": "docs(v0.17.2): bump CLAUDE.md — T-var identity-recovery gate",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-02T14:07:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d102c797d5ec29b13757e06a1bb262259de1f92",
          "body": "Closes the α-renamed synth-var (T9000-space) leak in coerceCallArgsAt's\nfallback arm: identityRecovered was self-pinning tvars that had been moved\ninto 9000-space by alphaRenameCalleeTVars for caller-scope isolation,\nskipping the erase-scoped fallback and emitting rt.Coerce[T9001](...)\nwhich go buil\n[…]\n_view)\n- example-sweep: 26/26 pass\n- cabal-test: 981 examples / 0 failures / 6 pending (baseline + 3\n  new for TVarSubstitutionLeakSpec)\n- Non-regression: #521 fixture still preserves Widget_Cfg_R[T2]",
          "is_bot": false,
          "headline": "Merge fix/v0.17.2-tvar-substitution-leak — T-var identity-recovery gate",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-02T14:06:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "28450bf2d23016175ba95d31b7a32cc99ba27641",
          "body": "The cabal spec module registration alone doesn't run the spec —\ntest/Spec.hs is the test driver that imports each SpecModule and\ninvokes its `spec` in a describeT block.  Without the import +\ndescribeT here, the module compiles but no test runs.\n\nFollow-up to 38cde3e6.  Verified:\n  $ scripts/cabal-t\n[…]\nean end-to-end [OK]\n      the emitted Go contains no α-renamed T<n>-in-9000-space token [OK]\n      the built binary runs and prints the concatenated sibling-helper output [OK]\n  3 examples, 0 failures",
          "is_bot": false,
          "headline": "test(v0.17.2): wire TVarSubstitutionLeakSpec into test driver",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-02T13:04:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "38cde3e6b42c9dbd4627e206b763ac14ac3d35b0",
          "body": "Root cause: alphaRenameCalleeTVars (Compile.hs iter 27) moves a\ncallee's declared T1/T2 into a callee-private 9000-space (T9001 etc)\nin the fallback arm of coerceCallArgsAt so the enclosing-scope\ncheck in substituteOnly reliably erases them to `any`.  The\nidentityRecovered branch — added in v0.16.13\n[…]\nonLeakSpec.hs\nasserts (1) the minimal fixture builds clean, (2) the emit carries\nzero 4-digit T tokens (α-rename leak invariant), (3) the built\nbinary prints the expected sibling-helper concatenation.",
          "is_bot": false,
          "headline": "fix(v0.17.2): gate identityRecovered on caller-scope tvars",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-02T12:36:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "69f2349894bbb2a48b3f0bcbcc6894b99cc9ec1b",
          "body": "Bundles three community fixes from @arthurmaciel (PRs #134/#135/#136):\n\n- Security: shell-injection in sky add / remove / verify (PR #134)\n  Replaces `sh -c \"cd sky-out && go get \" ++ user_value` with\n  argument vectors (`callProcessIn dir cmd args` helper + argv-based\n  curl for verify). Behaviour \n[…]\nLocal sky CLI smoke: init/build/run/add/remove all clean\n- Injection blocked at go's module-path parser (not shell)\n- 26/26 example sweep + 39/0 targeted spec gates\n\nThanks Arthur for all three fixes.",
          "is_bot": false,
          "headline": "Merge v0.17.1 — security + List.sortWith + Math.min/max Float fix",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-02T02:09:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "736c3a2337edb8a61b473cfb50877a501e26ea6e",
          "body": "…136)\n\nMath.min / Math.max now route through the polymorphic rt.Math_min /\nrt.Math_max path (skyLessThan comparator) instead of the typed-int\nrt.Math_minT / rt.Math_maxT + rt.AsInt-wrapped args path, closing\nthe Float-truncation bug that mis-scaled Std.Ui.Chart heatmap and\nsparkline.\n\nPer-cluster ra\n[…]\nressionSpec:\n  127 → 128 (+1 — same +1 CoerceFloat emit as showcase).\n\nAll deltas trace to a single mechanism (poly-Math routing over\ntyped-int-fast-path); rationale documented in-place in both specs.",
          "is_bot": false,
          "headline": "test(v0.17.1): ratchet rt.Coerce baselines for Math.min/max fix (PR #…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-01T20:43:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0f458e6176cefde1df3638b50c610716f7d7a299",
          "body": "Runs SKY_REGEN_SKIP_CABAL=1 scripts/regenerate-console.sh after the\nMath.min/max Float-truncation fix (PR #136) landed. The delta is\nexactly what the fix predicts: the compiler now lowers Math.min/max\nvia rt.Math_min / rt.Math_max (polymorphic, comparator-based) instead\nof rt.Math_minT / rt.Math_max\n[…]\ner than cherry-picking PR #136's baked\nruntime-go/rt/console_app/main.go because that file diverged after\nthe v0.17.0 Gap 1 sealed-iface classifier regen — regen from source\navoids the merge conflict.",
          "is_bot": false,
          "headline": "chore: regenerate console_app for the Math.min/max codegen change",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-01T20:38:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4778ab9b4f66f7e32a6d819c4d47100905cf33ac",
          "body": "Math.min / Math.max are polymorphic (`a -> a -> a`, \"any comparable type\" —\nSky.Core.Math), but the Go backend coerced their arguments through AsInt: the P8\ntyped-companion pass emitted rt.Math_minT(rt.AsInt(x), rt.AsInt(y)) (typedKernelArgCoerce\n+ typedKernelLiterals), and the polymorphic fallback \n[…]\nhe (now-correct)\npolymorphic kernel — the use-site coercion narrows the result. Math.abs stays\n(its Sky type is Int -> Int, so AsInt is correct). Regression tests cover Float,\nInt, and String min/max.",
          "is_bot": false,
          "headline": "fix(codegen): Math.min/Math.max preserve Float (and String) args",
          "author_name": "Arthur Maciel",
          "author_login": "arthurmaciel",
          "committed_at": "2026-07-01T20:35:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "476dc260842e4f2044ec47bf9920e19d0269db52",
          "body": "List.sortWith ((a -> a -> Int) -> List a -> List a, Elm's custom-comparator sort)\nis already typed in the shared type-constrainer (Sky.Type.Constrain.Expression),\nas a sibling of List.sort / List.sortBy. But the Go backend never implemented it:\nneither the Go Kernel.hs mapping nor runtime-go/rt had \n[…]\n a b < 0 => a precedes b), so equal elements keep input order. Regression\ntests cover ascending / descending / stable / empty.\n\nCloses a type-checks-but-codegen-fails gap for a standard list function.",
          "is_bot": false,
          "headline": "feat(stdlib): implement List.sortWith in the Go backend",
          "author_name": "Arthur Maciel",
          "author_login": "arthurmaciel",
          "committed_at": "2026-07-01T20:33:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b5f9dd5492f68b6bb19c5dcd17739037a9875735",
          "body": "`sky add`, `sky remove`, and `sky verify` built shell command strings by\nconcatenating user/project-supplied values into `sh -c \"… ++ value\"` unquoted,\nso a crafted value ran arbitrary shell. Replace with argument vectors (a\n`callProcessIn dir cmd args` helper for the go-get / go-mod paths; `curl` v\n[…]\nlpkg; touch /tmp/PWNED #'\n  before: sh -c \"cd sky-out && go get evilpkg; touch /tmp/PWNED #\" → /tmp/PWNED created\n  after:  go: malformed module path \"evilpkg; …\" — argv to go, no shell, no /tmp/PWNED",
          "is_bot": false,
          "headline": "fix: shell-injection in `sky add` / `sky remove` / `sky verify`",
          "author_name": "Arthur Maciel",
          "author_login": "arthurmaciel",
          "committed_at": "2026-07-01T20:30:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9e5bb71441f7f4e494075493c7f125bfeeba4965",
          "body": "…oerce residual doc\n\nMerges 492 commits from feat/v0.17-pure-sound-codegen. Ships:\n\n- v0.17 Phase A criterion #3 IORef architectural close (iter 15-17b)\n  - ctxFromIORef + lookupKernelAlias bridge helpers DELETED\n  - 136+ phaseAFallback hops drained across 11 iters\n  - scopeStateRef machine-verified\n[…]\n class specs (NoT1LeakInNotesApp, CrossModuleLambda\n  CollisionC, DepCurrentModuleHint x 2) — leak is emission-time\n  monomorphisation noise, NOT a runtime panic on any of the 26/26\n  shipped examples",
          "is_bot": false,
          "headline": "Merge v0.17.0 close — sealed-iface classifier + IORef contract + rt.C…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-01T17:04:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "52d3fbb78fbd73656616debbb2356137963d3e1e",
          "body": "Recognises this session's shipped work:\n- classifyCoerceTarget + coerceArg + coerceSubject + legacyTcoCase\n  route sealed-iface targets through rt.Coerce[T]\n- Direct CLAUDE.md §8 non-regression compliance",
          "is_bot": false,
          "headline": "docs(v0.17): add Gap 1 sealed-iface classifier to Current state table",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-01T17:03:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1fd6b8792f5247fa7c0eed55f1048d178ca92fd",
          "body": "macos-latest-xlarge run 28528486424 failed at scheduling in 2 s\n(0 steps executed) — larger macOS runners aren't in the free\ntier for public repos on the free plan.\n\nDocumented the try + rejection in a code comment so we don't\nretry blindly.\n\nReverts 5a66c3ed. Back on macos-latest.",
          "is_bot": false,
          "headline": "Revert \"ci: bump macOS runner to macos-latest-xlarge\"",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-01T15:24:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a66c3ed35b1129265b2838f5ff81ece02863e36",
          "body": "Standard macos-latest (3-core M1, 7 GB RAM) runs ~3× slower than\nubuntu-latest on cabal test + example sweep, blocking CI signal\nturnaround. Bump to macos-latest-xlarge (6-core M1 Max, 14 GB\nRAM) for ~2× wall-clock improvement.\n\nKept `matrix.os` as the logical name so the six existing\n`if: matrix.os\n[…]\nix.runner` field for the actual runner label.\n\nRollback: change `runner: macos-latest-xlarge` back to\n`runner: macos-latest` if billing rejects (larger macOS\nrunners aren't included in the free tier).",
          "is_bot": false,
          "headline": "ci: bump macOS runner to macos-latest-xlarge",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-01T15:23:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3c1bd01d4413727e0b3ba82588618cf1c4409a01",
          "body": "CI ubuntu-latest sky-linux-x64 flagged two failure classes after\nthe sealed-iface classifier fix. Both closed here.\n\n(1) RtCoerceBudgetSpec — second baseline gate I missed on the\nfirst push (PhaseABaselineRegressionSpec is a separate gate):\n- rt.Coerce[ cluster: 84 → 151 (+67, Gap 1 sealed-iface del\n[…]\nny of\nthe 26/26 shipped examples — the leak is emission-time noise in\ntype-argument monomorphisation, not a soundness violation at\nexecution.\n\nLocal verification: 10 examples / 0 failures / 4 pending.",
          "is_bot": false,
          "headline": "fix(v0.17 Gap 1): bump rt.Coerce budget + defer T2-leak specs",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-01T10:03:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "df5d2dcee2631e7f359a9fddf4c73a5e3c9f1a79",
          "body": "CI \"Console inline-copy drift check\" flagged that\nruntime-go/rt/console_app/main.go was stale relative to\nsky-bundled/console/src/ after Compile.hs's Gap 1 emission\nchange (raw .(SealedIface) -> rt.Coerce[SealedIface]).\n\nRan: SKY_REGEN_SKIP_CABAL=1 scripts/regenerate-console.sh\n\nDelta matches Gap 1 \n[…]\nR / State_ServiceStat_R / etc.\n\nStruct-alias sites (LayoutContext = int) remain raw `.(T)` —\nClass 1 documented residual, structurally sound.\n\nVerified: go build ./runtime-go/rt/console_app/... clean.",
          "is_bot": false,
          "headline": "chore(v0.17 Gap 1): regenerate bundled console_app for sealed-iface fix",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-01T08:58:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7d4b972f74a912a492d6386e9e4c0cbcdeecbf8d",
          "body": "- Gap 1: SHIPPED at a33cad57 (sealed-iface classifier arm)\n- Fuzzer flake: documented as harness-not-compiler\n  (10s subprocess timeout on cold cache; failing program\n  compiles + runs in 2.9s manually — filed as v0.17.1\n  harness follow-up)\n- Milestone gate battery status:\n  - cabal spec subset GRE\n[…]\n\n  - verify-cli GREEN (13/0/1-skip GUI)\n  - verify-all-web IN-FLIGHT\n- Judge PASS verdict recorded (VERDICT: 100% ACHIEVED\n  under REFRAMED SHIPPING SCOPE)\n- Tag v0.17.0 stays user-owned per CLAUDE.md",
          "is_bot": false,
          "headline": "docs(v0.17): update AUTONOMOUS_GOAL ratification with close status",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-01T08:42:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a33cad5798df89c944fb12e52f89ad9797828658",
          "body": "CLAUDE.md §8 non-regression close for the sealed-interface class:\nraw `.(SealedIface)` assertions no longer emit on any-typed thunks —\nroute through `rt.Coerce[<iface>]` (reflection-backed reshape, sound\nby construction via `Rec._cg_sealedIfaceNames` registry).\n\nCompile.hs changes\n- classifyCoerceTa\n[…]\np\n\nVerify sweep: 26-ui-showcase raw `.(T)` on sealed-iface names went\nfrom 82 to 41 (remaining 41 are pure Go type aliases — Class 1\nresidual). Future: expand sealedIfaceFlipAllowList per iters 63-72.",
          "is_bot": false,
          "headline": "feat(v0.17 Gap 1): sealed-iface classifier + AUTONOMOUS_GOAL ratify",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-07-01T08:37:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e248b242f8c1654daa6cb155703cd35f518c3508",
          "body": "… ctxFromIORef — criterion #3 architectural close\n\nCloses the last 2 `ctxFromIORef ()` call sites + DELETES both\nthe `lookupKernelAlias` bridge AND the `ctxFromIORef` helper\nitself.  This is the literal criterion #3 close for the\nctxFromIORef-bridge surface per CLAUDE.md §0.3 rule 1's locked\nwording\n[…]\nulative iter 7-17b: 136+ phaseAFallback IORef hops eliminated\n+ 2 bridge helpers DELETED. N-strikes audit: 11 successful iters\nsince session 10 (zero reverts on the lever after iter 17a's\ncorrection).",
          "is_bot": false,
          "headline": "feat(v0.17 Phase A iter 17b): drain lookupKernelAlias bridge + DELETE…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-30T17:58:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "81e336a8c979bea4b5655b3e521d0ec2d1a7e932",
          "body": "…erCtxFromEmitCtx helper\n\nDrains site :20659 — `exprToMainStmtsTyped (ctxFromIORef ()) solvedTypes body`\ninside `generateMainFunc`. Replaces with `buildLowerCtxFromEmitCtx\nphaseACtx` (the existing well-tested helper at Compile.hs:13503-13514).\n\nMechanism:\n  * Widen `generateMainFunc :: Can.Module ->\n[…]\ns rewriteAliasHead widening to drain :14023 +\n    walkAuthCalls thread\n  * Iter 17c ships criterion #3 contract docstring + spec gate\n\nCumulative iter 7-17a: 134+ phaseAFallback IORef hops eliminated.",
          "is_bot": false,
          "headline": "feat(v0.17 Phase A iter 17a): drain exprToMainStmtsTyped via buildLow…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-30T17:43:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a940f1df5c1a9b4194406e7fc0517964d736f20a",
          "body": "…er 17a learning\n\nCaptures:\n  * Iters 15+16 shipped (cc0304b0 + 08fa0a56) — 5 closures total\n    (3 drains + 2 dead-helper deletions of isParametricCompatibleSource\n    + exprToMainStmts + exprToGoTypedWithRet)\n  * Cumulative iter 7-16: 133+ phaseAFallback IORef hops eliminated\n  * N-strikes audit o\n[…]\nin)\n  :20659        exprToMainStmtsTyped entry (generateMainFunc body)\n\nPlus 2 scopeStateRef bracket-scope readers (phaseAFallback +\nphaseAFallbackFromCtx) per the criterion-3 locked-wording contract.",
          "is_bot": false,
          "headline": "docs(v0.17): session-11 checkpoint — Phase A iters 15-16 shipped + it…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-30T17:04:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "08fa0a56170b564738731078f4ee6734a0021dbc",
          "body": "…2 dead legacy wrappers\n\nThree phaseAFallback (ctxFromIORef ()) IORef hops eliminated via the\nestablished \"drain-caller\" lever (proven by iters 7-15):\n\n  1. WIDEN operandIsStaticallyTyped :: Can.Expr -> Bool\n     → :: LC.LowerCtx -> Can.Expr -> Bool\n     Drains the two `phaseAFallback (ctxFromIORef \n[…]\nmbdaGoStr + withScopedLambdaGoStrings) per CLAUDE.md §0.3\nrule 1.\n\nCumulative drain count (iters 7-16): 133+ phaseAFallback IORef\nhops eliminated.  N-strikes audit: 10 consecutive iters, zero\nreverts.",
          "is_bot": false,
          "headline": "feat(v0.17 Phase A iter 16): drain operandIsStaticallyTyped + delete …",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-30T16:50:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cc0304b0f4a50e1c1a573b06dc2aeed5d8f8ba2c",
          "body": "…te dead isParametricCompatibleSource\n\nTwo phaseAFallback (ctxFromIORef ()) IORef hops eliminated:\n\n  1. DELETE isParametricCompatibleSource (Compile.hs:17500-17532).\n     Exhaustive grep across src/+test/+app/ confirms no external\n     caller — only its own definition and the recursive self-call\n  \n[…]\necordWriterAudit — pass\n  * 26-example sweep — 26 passed, 0 failed\n\nCumulative drain count (iters 7-15): 130+ phaseAFallback IORef\nhops eliminated.  N-strikes audit: 9 consecutive iters, zero\nreverts.",
          "is_bot": false,
          "headline": "feat(v0.17 Phase A iter 15): drain isPlainIdentForTypedRouting + dele…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-30T16:31:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1eafa077b9139f672a433b8a02a928b6df2bf6e8",
          "body": "Captures the iter 12-14 run (commits 35cc7c9d → 71568bdd):\n* 108 phaseAFallback IORef hops eliminated this session\n* Cumulative iter 7-14: 128+ hops across 8 consecutive iters\n* N-strikes audit: zero reverts\n* Iter 13 bulk drain (102 sites in one replace_all) validated the\n  lever's bulk-application\n[…]\n CLAUDE.md \"Stop conditions and honesty\":\n8-iter session = sustainable break point before iter 15's signature\nwidening (more complex than the iter 7-14 drain pattern). Resume\nprotocol fully specified.",
          "is_bot": false,
          "headline": "docs(v0.17): session-10 checkpoint — Phase A iters 12-14 shipped",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-30T15:58:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "71568bdd0f09a8bda88d0130ecfa49cab88c015a",
          "body": "…e (single-line)\n\nCompile.hs:13859 — replace `patternBindings (phaseAFallback parentCtx) tmp pat`\nwith `patternBindings (phaseAFallbackFromCtx parentCtx) tmp pat` inside\n`lowerTypedLambda`.\n\nArchitecture-Consult agent verified:\n* parentCtx is the SAME LowerCtx threaded into exprToGoExpectGo's Lambda\n[…]\n868,\n  :21917, :21921)\n* iter 17: DELETE phaseAFallback function + scopeStateRef IORef\n  ENTIRELY. **Criterion #3 architectural close.**\n\nRefs: session-9 checkpoint @ a1768d7c, iter 13 bulk @ e90b20b4",
          "is_bot": false,
          "headline": "feat(v0.17 Phase A iter 14): drain final phaseAFallback parentCtx sit…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-30T15:40:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e90b20b422a3ad02a7e42a5e4c932e4e9840fa7d",
          "body": "…s → phaseAFallbackFromCtx ctx\n\nAfter iter 12 grilled the multi-entry helper batch and shipped 5 sites\ncleanly (35cc7c9d), iter 13 takes the lever's proven track record (N=6\nconsecutive iters, zero reverts) and applies it in bulk to ALL remaining\n`phaseAFallback ctx` occurrences in Compile.hs.\n\nMech\n[…]\nter iter 13: 102+18 = 120 phaseAFallback IORef hops eliminated.\nRemaining 2 sites (parentCtx + ctxFromIORef pattern) are tracked for\niter 14.\n\nRefs: session-9 checkpoint @ a1768d7c, iter 12 @ 35cc7c9d",
          "is_bot": false,
          "headline": "feat(v0.17 Phase A iter 13): BULK DRAIN — 102 phaseAFallback ctx site…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-30T15:26:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "35cc7c9d4386c56f841a74084d2f91b76b1d5b20",
          "body": "…lti-entry helpers\n\nSites drained (per architecture-consult agent's SAFE batch verdict):\n* Compile.hs:15247 — coerceToFieldTypeMSrc (4 callers — lowerRecordLiteralTo,\n  RecordUpdate, Record literal, coerceToFieldType shim — all bracket-covered)\n* Compile.hs:15991 — coerceVia (2 callers, both inside \n[…]\n6321/16357/16360/16361/\n  16536/16539/16540/16598/16620/16629 + 17089/17126/17198/17302\n  (emitPartialCtor + coerceCallArgsAt + kernel coercion — coherent batch)\n\nRefs: session-9 checkpoint @ a1768d7c",
          "is_bot": false,
          "headline": "feat(v0.17 Phase A iter 12): drain 5 phaseAFallback callers across mu…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-30T15:14:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a1768d7c407297b4386e3fff903818fc149ffec9",
          "body": "Captures the 5-iter run (commits ff32b01c → 9013630a):\n* 18 phaseAFallback IORef hops eliminated (17 drains + 1 dead helper)\n* N-strikes lever validated (zero reverts across 5 consecutive iters)\n* Process breach + recovery documented (iter 9 skipped grill, user\n  flagged, grill REVISE corrected — lo\n[…]\nc\n  iter-0 contract, third-reader pattern, nested-overwrite robustness)\n* Remaining DEFERRED sites with iter 12-15 ordering recommendation\n\nReady for next session pickup with grounded resume protocol.",
          "is_bot": false,
          "headline": "docs(v0.17): session-9 checkpoint — Phase A iters 7-11 shipped",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-30T15:01:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9013630a7305fa6ade33f0807215fe856753e072",
          "body": "…dead coerceFfiArg helper\n\nSites drained (per architecture-consult agent's SAFE batch verdict):\n* Compile.hs:15833 — coerceFfiArgViaAlias isPrimLiteralArg arm\n* Compile.hs:15835 — coerceFfiArgViaAlias isCallerVisibleGoType arm\n* Compile.hs:15846 — coerceFfiArgViaAlias alias arm\n\nDead code DELETED:\n*\n[…]\nt)\n* 14290/14329 (zipWith3 partial — thunk timing)\n* 15245/15813+ (multi-entry helpers — coerceToFieldTypeMSrc family batch)\n* 16066+ (emitPartialCtor 4-site cluster)\n\nRefs: phase-A-iter-7-8-design.md",
          "is_bot": false,
          "headline": "feat(v0.17 Phase A iter 11): drain 3 phaseAFallback callers + delete …",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-30T15:00:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "95d38ba470eacda1dd787fa509bc759f90b96463",
          "body": "…nt-grilled batch)\n\nSites drained (per architecture-consult agent's SAFE batch verdict):\n* Compile.hs:13590 — exprToGoExpect (pure delegation)\n* Compile.hs:13780 — exprToGoExpectGo default arm (coerceReturnExprT inner call)\n* Compile.hs:14832 — RecordUpdate field-lower (coerceToFieldTypeMSrc)\n* Comp\n[…]\n3 partial — thunk timing audit)\n* 15245, 15813, 15829, 15831, 15842, 15983 (multi-entry helpers)\n* 16066, 16074 (emitPartialCtor)\n\nRefs: iter 7+8 design @ docs/v0.17-roadmap/phase-A-iter-7-8-design.md",
          "is_bot": false,
          "headline": "feat(v0.17 Phase A iter 10): drain 6 SAFE phaseAFallback callers (age…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-30T14:47:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "539a597dc9e35c4d11035d2832ecbb9e7fa8d341",
          "body": "…eIIFE/coerceReturnExprT/wrapTypedReturn\n\nSites drained:\n* Compile.hs:10145 / :10150 — goZeroValue inside typeIIFE\n* Compile.hs:10161 / :10162 — wrapTypedReturn fallback arms in typeIIFE\n* Compile.hs:10210 / :10214 — goZeroValue + wrapTypedReturn in coerceReturnExprT\n* Compile.hs:10626 — goExprGoTyp\n[…]\nul of legacy probe paths) will be drained iter 10+.\n\nDesign: docs/v0.17-roadmap/phase-A-iter-7-8-design.md (extended with\nthe iter 9 grill-validated safety lemma)\nRefs: iters 7+8 @ ff32b01c + b211c254",
          "is_bot": false,
          "headline": "feat(v0.17 Phase A iter 9): drain 7 phaseAFallback callers inside typ…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-30T14:33:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b211c254f0b3bfda73cd38afae6a61152f5b06cb",
          "body": "… emission\n\nSite Compile.hs:9360 (lowerFnBody) — symmetric drain to iter 7 at the\nentry-module emission path.  Replace `phaseAFallback entryBodyCtx`\nwith `phaseAFallbackFromCtx entryBodyCtx`.\n\nSame architectural justification as iter 7:\n\n* entryBodyCtx is constructed pure-functionally above (lines 9\n[…]\nn reader\" lever respectively.  No revert observed\non either; lever continues to validate.\n\nDesign: docs/v0.17-roadmap/phase-A-iter-7-8-design.md\nRefs: task #678 v0.17 Phase A iter 6, iter 7 @ ff32b01c",
          "is_bot": false,
          "headline": "feat(v0.17 Phase A iter 8): drain phaseAFallback caller at entry body…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-30T13:18:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ff32b01ccbccf6d36686dabcc82adc11cb5f0adf",
          "body": "…mission\n\nSite Compile.hs:6888 (lowerDepBody) — replace `phaseAFallback depBodyCtx`\nwith `phaseAFallbackFromCtx depBodyCtx`. The new helper does NOT read\nscopeStateRef; it derives cgEnv from the threaded LowerCtx's\nLC.lookupCgEnv field directly, and continues to read the sanctioned\nglobalAnonRecords\n[…]\nter 8 follows\nwith the symmetric drain at Compile.hs:9360 (entry body emission).\n\nDesign: docs/v0.17-roadmap/phase-A-iter-7-8-design.md\nRefs: task #678 v0.17 Phase A iter 6, #682 v0.17 Phase A iter 6d",
          "is_bot": false,
          "headline": "feat(v0.17 Phase A iter 7): drain phaseAFallback caller at dep body e…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-30T13:09:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "56152100d0f5ecfda213023021b9c2208401c869",
          "body": "Ground the next executor session for criterion #3 close. After 5 prior\nreverts on the cgEnv-reader-bridging lever family (iter 17 / 37 / 42 /\nClass-A swap / Session 8 Option F), this design takes the OPPOSITE\nlever: drain phaseAFallback readers at sites where the threaded ctx is\nalready the truth, r\n[…]\nramed as \"2/17 sites drained\".\n\nCompanion docs: phase-A-cgenv-reshape.md (master plan),\nphase-A-iter-0-anonrecords-contract.md (AnonRec sanction),\nsession-8-option-F-result.md (5th revert postmortem).",
          "is_bot": false,
          "headline": "docs(v0.17): Phase A iter 7+8 design — drain 2/17 phaseAFallback callers",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-30T12:51:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3362e90872d3f7cd7a8088a7cfc6ec99bb97e3ee",
          "body": "…idening)\n\nCI surfaced a Phase A ratchet failure (+1 rt.Coerce in\n00-standard-libs) from commit 277ee217's 5-site cgEnv widening at\nstruct-decl + record-literal emission.\n\nThe widening is structurally correct — user record aliases\nreferenced inside Maybe/Result/Task wrappers now resolve to their\ntyp\n[…]\nd to consume the typed shape.\n\nVerification: `Sky.Build.PhaseABaselineRegression — v0.17 Phase A\nratchet gate / every Phase A baseline is monotone non-increasing`\npasses locally with the new baseline.",
          "is_bot": false,
          "headline": "fix(v0.17): bump 00-standard-libs rt.Coerce baseline 124→125 (cgEnv w…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-30T11:39:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "277ee217a11a99362c47e370596ee303f9f11605",
          "body": "…f snapshot, slider Number→String narrow, mktemp\n\nCloses the 4 issues surfaced from manual example testing (#2-#5 of the\nbatch; #1 skyshop perf is separate):\n\nCompiler / runtime fixes:\n\n* Compile.hs:patchMissingAnonRecordDecls — re-read 'globalAnonRecords'\n  IORef post-render to recover anon shapes \n[…]\nhot timing\n  divergence (architectural-consult input, not the fix path).\n* docs/v0.17/session-8-option-F-result.md — postmortem of an earlier\n  speculative fix path that didn't address the root cause.",
          "is_bot": false,
          "headline": "fix(v0.17): close 4 user-reported issues — PORT env, anon-record IORe…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-30T10:41:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "53e82c44d2505e9c3cc3885d3dbe81b39468cc3f",
          "body": "…-PR arc\n\nUser direction \"let's sort the bundle console, it's important\" attempted\nvia 2 single-site fixes; both produced regressions.  N-strikes\ncircuit-breaker triggered (4+ attempts on the same lever across Sessions\n4-8).  Halting per CLAUDE.md §0 hard rule 4 + §0.3 rule 3.\n\nAttempt A (site 13763\n[…]\napp/main.go (production artifact) is\nunchanged.  Only `regenerate-console.sh`'s drift check fails — bundled\nconsole WORKS in production.\n\nFull analysis: docs/v0.17/session-8-bundled-console-blocker.md",
          "is_bot": false,
          "headline": "docs(v0.17): Session 8 — bundled-console close requires Phase A multi…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-29T23:01:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7ee5290965a830bbabf66a3671fcabd33218889e",
          "body": "…A partial close\n\nUser direction (2026-06-29): \"don't defer, autonomous mode\" after 3 sessions\nof grilled-lever-attempts ended at design-phase BLOCK verdicts.  Broke the\nagent-mediated analysis loop, read the source directly to resolve grill\ncontradictions, then SHIPPED the actual fix.\n\nThe widening\n[…]\nanalogue to the 5 token-level\n  erasure sites (Compile.hs:9626/15098/15844/19088/19090)\n* Option β: continue locked Phase A multi-PR reshape\n\nFull session log: docs/v0.17/session-7-widening-shipped.md",
          "is_bot": false,
          "headline": "docs(v0.17): Session 7 close — predicate widening SHIPPED as Problem …",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-29T21:18:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9e56a3d8b4915c40d238b306cd07817f5ed56caf",
          "body": "…pe mismatch\n\nmapNamedType's isRecordAlias check at Type.hs:1427-1428 looked up\n`<base>_R` / `<name>_R` keys in mcRecordAliases.  But the registry\nstores BARE names per collectRecordAliases (Record.hs:391) +\ndepRecAliases (Compile.hs:4501-4506):\n  - Entry-mod: BARE `<name>` (e.g. \"Model\", \"Store\")\n \n[…]\nerialise (15-http-server + 36-composite-server build clean, sweep\n26/26) because runtime narrowStructToStruct (rt.coerceInner) already\nbridges rt.SkyRequest ↔ Sky_Http_Server_Request_R via reflection.",
          "is_bot": false,
          "headline": "fix(v0.17): isRecordAlias predicate widening — close registry-key sha…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-29T21:02:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ed6b6f2d6620d0d3deb253b2752666b2c4a05903",
          "body": "…+ scope unverified\n\nUser selected Option γ (kernel-name registry split by home module).  Per\nCLAUDE.md §0.4 discipline: Architecture-Consult + 2 grillers spawned BEFORE\ncode change.  Both grillers found serious issues.\n\nArchitecture-Consult PROCEED — proposed adding skyStdlibHomePrefixes prefix\nlis\n[…]\nline win: 3 grills across 3 sessions caught 3 different lever designs\nbefore any shipped a regression.  Working tree clean at fe45bbf7.\n\nFull grill output: docs/v0.17/session-6-option-gamma-blocked.md",
          "is_bot": false,
          "headline": "docs(v0.17): Option γ BLOCKED by adversarial grills — factual errors …",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-29T20:25:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ee53d708f67dcdebb6712eca3e869b81d1a734b4",
          "body": "…gression + 5/6 emit sites bypass\n\nUser selected Option α (renderer priority swap in mapNamedType) for autonomous\nexecution.  Per CLAUDE.md §0.4 discipline: Architecture-Consult + 2 adversarial\ngrillers spawned before code change.  Both grillers returned BLOCK with\nconvergent serious findings.\n\nArch\n[…]\n4: genuine implementation blocker requiring user direction.\nDiscipline win: grill-before-code caught the regression before sweep break.\n\nFull grill output: docs/v0.17/session-5-option-alpha-blocked.md",
          "is_bot": false,
          "headline": "docs(v0.17): Option α BLOCKED by adversarial grill — Server stdlib re…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-29T20:13:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fe45bbf768a9bd69a144f2bb4cfb3efbb63dbaaa",
          "body": "…Go lever exhausted\n\nPer CLAUDE.md §0.3 rule 3 + §0.4 N-strikes circuit-breaker: 3 consecutive\nattempts on the same architectural lever (cgEnv threading at\nsubstituteTVarsToGo call sites) failed to fully close Problem A.  A 4th\nattempt on the same lever is FORBIDDEN.\n\nAttempt 1 (naive full phaseACtx\n[…]\n is the locked Phase A path.\n\nWorking tree clean at 4718e37a; Commits 1+2 scaffolding stays for the\nchosen Option to consume.\n\nFull reclassification: docs/v0.17/session-4-n-strikes-reclassification.md",
          "is_bot": false,
          "headline": "docs(v0.17): Session 4 N-strikes reclassification — substituteTVarsTo…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-29T19:57:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4718e37ab59630f2670b9a0f0e9e502122436f5c",
          "body": "Per Path A (user-selected 2026-06-29): instrumented sites 7255 + 8941 +\n13763 with SKY_PROBLEMA_TRACE-gated traces, ran regenerate-console.sh,\ncaptured attribution data (then reverted tracing).\n\nDEFINITIVE FINDING:\n* Site 7255 (generateAliasForDep) emits the leak.  Two trace lines:\n    [BISECT-7255]\n[…]\nias map.  Spec must lock this.\n\nNext step: re-grill the focused fix specifically (not the broader 3-site\nmigration) before implementing.\n\nFull report: docs/v0.17/session-4-commit-3-bisection-result.md",
          "is_bot": false,
          "headline": "docs(v0.17): Commit 3 empirical bisection — Site 7255 attributed",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-29T19:29:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d57cb672115b0c91c9c85e587105643d0b00204c",
          "body": "… empirical bisection\n\nPer AUTONOMOUS_GOAL.md workflow: spawned Architecture-Consult agent + 2\nadversarial grillers in parallel BEFORE touching code (after a prior naive\nCommit 3 attempt regressed sweep 26→16 and was reverted).\n\nArchitecture-Consult: REVISE (proposed minimal cgEnv at sites 7255+8941\n[…]\noning per-\ncommit grill would NOT have caught.  Agents + grilling is a load-bearing\nprocess for compiler-level changes per CLAUDE.md §0.4.\n\nFull report: docs/v0.17/session-4-commit-3-grill-findings.md",
          "is_bot": false,
          "headline": "docs(v0.17): Commit 3 BLOCKING grill findings — defer migration until…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-29T19:18:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cd8f4ebf834089860297191f5e2ff2e1a57aa1b9",
          "body": "… 4 C1+C2)\n\nArchitecture-Consult agent verdict in docs/v0.17/session-4-architecture-consult.md\nidentified the env-FREE solvedTypeToGo fallthrough in substituteTVarsToGoBounded as\nthe leak channel behind Problem A — dep-module record-alias lookups emit kernel\nnames (e.g. rt.SkyStore) instead of the d\n[…]\nterminism gate (26-ui-showcase main.go SHA-256):\n  Pre-edit  d92896acd7620b6b...\n  Post-edit d92896acd7620b6b...\nrt.Coerce count unchanged at 177.\n\nCommit log: docs/v0.17/session-4-commits-1-2-log.md.",
          "is_bot": false,
          "headline": "feat(v0.17): substituteTVarsToGo cgEnv-threading scaffolding (Session…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-29T18:34:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "befbc4c62698cdbd6cf8ca9002303673c519c8bb",
          "body": "…y.Live console panic)\"\n\nThis reverts commit e4a8353cf809949557715007d82d14d5614658ca.",
          "is_bot": false,
          "headline": "Revert \"fix(codegen): anon-record literal/type-alias shape parity (Sk…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-29T18:08:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4a8353cf809949557715007d82d14d5614658ca",
          "body": "…onsole panic)\n\nEvery Sky.Live app's auto-mounted /_sky/console route panics on render:\n\n  interface conversion: interface {} is\n    struct { Bottom interface{}; Left interface{}; Right interface{}; Top interface{} },\n    not struct { Left int; Right int; Top int; Bottom int }\n\nReproduced on example\n[…]\ne_app/main.go` regenerated from\n`sky-bundled/console/src/` with the fixed compiler. The Anon_R\nalias at line 7865 + literal sites at lines 3673, 3945, 5533, 5781,\n6091 are now structurally consistent.",
          "is_bot": false,
          "headline": "fix(codegen): anon-record literal/type-alias shape parity (Sky.Live c…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-29T17:37:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dfc7eb6a91a2541b6f234819fa48d7db54a869ca",
          "body": "This reverts commit a643b492f8552f20df7ecc07975a4566a8fe435c.",
          "is_bot": false,
          "headline": "Revert \"fix(v0.17): defuse ctxFromIORef CSE via readIORefNoCse\"",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-29T14:20:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a643b492f8552f20df7ecc07975a4566a8fe435c",
          "body": "Close DictSource \"Dict.toList on Dict Int v emits rt.Dict_toListIntKey\"\nspec under in-process cabal-test. Root cause: GHC -O2 can CSE inline\n`unsafePerformIO (readIORef scopeStateRef)` expressions across call\nsites despite the wrapper's NOINLINE pragma; first in-process fixture's\nkernelAlias map bec\n[…]\neady reproducing the same fixture-cache\n  symptom independently of the CSE fix).\n* example-sweep — 26/26 examples build (server / cli / gui).\n\nNo new IORef. No new global. Minimal targeted CSE defuse.",
          "is_bot": false,
          "headline": "fix(v0.17): defuse ctxFromIORef CSE via readIORefNoCse",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-29T13:49:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a7be0857f45dae879dde5fd8270ad4bb75f57d1f",
          "body": "…vedTypes\n\nCloses the HeadAliasFunctionSigSpec \"function-typed alias as both head\nAND leaf (middleware shape)\" failure: a let-bound lambda inside `main`\nwas emitted as `func(any) any` even when HM proved it `Int -> Int`,\nbreaking call sites that passed it to a typed user function (Go reject:\n`cannot\n[…]\nnicalise.HeadAliasFunctionSig 5/5 pass\n* example sweep — 26/26 pass\n* /tmp/headalias fixture — clean `sky check` exit 0, emit:\n    inc := func(n int) int { return n + 1; }\n    decorated := double(inc)",
          "is_bot": false,
          "headline": "fix(typed-codegen): close head-alias both-positions panic via ctx sol…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-29T11:03:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cdb75770185c0f81b13f1f463d5b67a46f685763",
          "body": "Closes pre-existing cabal-test failure\n`Sky.Build.PhaseABaselineRegression.every Phase A baseline is monotone\nnon-increasing`.\n\nThe spec is a self-ratchet — it FAILS when the live count drifts from\nthe pinned baseline (either over OR under). Updates needed:\n\n* baseline26UiShowcaseRtAsListT: 191 → 18\n[…]\ntesApp: MaybeCoerce[T1] absent in emitted Go\n  - CoerceArgParametric: any(...).(Cfg_R[any]) nominal assertion\n  - AnonRecordSubprocessFixture: iter-18 cross-module HOF anon-record\n\nNo new regressions.",
          "is_bot": false,
          "headline": "test(v0.17): ratchet 3 Phase A baselines",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-29T10:06:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c57001df981ead0cc026797fa8a6184a061d4d32",
          "body": "…llback\n\nRe-ship of d1cdf08f, this time with end-to-end HTTP-GET verification\non the actual failing examples (the prior attempt's \"runtime PASS\"\nclaim was based on server-startup log only — the view-render path\nstill panicked).\n\n## Bug\n\n19-skyforum's homepage GET panics with `interface conversion:\nm\n[…]\n/ : panic → clean HTML with 23 sky-click attrs\n- 18-job-queue GET / : verified 7 sky-click attrs on Run* buttons\n- Example sweep: 26/26 PASS\n- Cabal test: 6 pre-existing failures, ZERO new regressions",
          "is_bot": false,
          "headline": "fix(v0.17): close cross-fn TVar-name collision at coerceCallArgsAt fa…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-29T09:32:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2dea68047bc5cf055154820474f213faefabf97e",
          "body": "…lArgsAt fallback\"\n\nThis reverts commit d1cdf08fb97ac63ff90314a87a282a402312f408.",
          "is_bot": false,
          "headline": "Revert \"fix(v0.17): close typed-emit TVar-name collision at coerceCal…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-29T07:58:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d1cdf08fb97ac63ff90314a87a282a402312f408",
          "body": "…fallback\n\nThe bug: a tail-recursive Sky.Core.List helper with signature\n`(Int -> a -> b) -> List a -> List b -> List b` calling\n`reverseHelp acc []` at the [] arm emitted\n\n    rt.AsListT[T1](acc)   // T1 = CALLER's first tvar (a)\n\ninstead of the correct\n\n    rt.AsListT[T2](acc)   // T2 = CALLER's b\n[…]\n9-skyforum main.go:40 (mapHelp): same class fixed ✓\n- 19-skyforum runtime: panic → \"Sky.Live listening on :8000\" clean ✓\n- Example sweep: 26/26 PASS ✓\n- Cabal test: 0 new failures vs branch baseline ✓",
          "is_bot": false,
          "headline": "fix(v0.17): close typed-emit TVar-name collision at coerceCallArgsAt …",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-29T07:38:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "04002121bf19ade4537c7932a8f471eb96cf9a47",
          "body": "The 8-line head was too shallow to diagnose typed-FFI dispatch panics\nthat traverse stdlib emit (indexedMapHelp / mapHelp / filter chains\ncalling reverseHelp). Widening to 40 lines surfaces the full path\nthrough Sky_Core_List_* helpers up to the rt.AsListT panic site —\nnecessary for diagnosing the typed-emit T1/T2 mixup bug class\nwithout requiring SKY_LOG_LEVEL=debug.\n\nCost: ~32 extra log lines per panic, only emitted on panic (rare path).",
          "is_bot": false,
          "headline": "fix(runtime): widen view-panic stack capture from 8 to 40 lines",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-29T00:17:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad7d7eec8a05acb42e7b3e59233ff0421744a741",
          "body": "isRecordAliasTy only matched the `<Name>_R` suffix convention.\nAnonymous-record aliases (synthAnonRecordName-produced names like\n`Anon_R_label_onPress__6l29hhop`) use a different naming convention\n(`Anon_R_<sorted-names>__<hash>`) so they fell through to\nCoerceTypeAssert which emits `any(e).(T)` — a\n[…]\nnd Coerce'd\nper-element.\n\nVerified: closes the `interface conversion: struct{Label,OnPress}\nvs struct{OnPress SkyMaybe,Label}` panic class observable in\nexamples/19-skyforum's view-render after click.",
          "is_bot": false,
          "headline": "fix(v0.17): route Anon_R_* targets through rt.Coerce[T]",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-28T23:21:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a70750b0daa32c8a1dd40f189f114493503d1d51",
          "body": "Sky.Live's view re-render after click was panicking with\n`interface conversion: main.Job_R is not main.Std_Html_Html: missing\nmethod SkyVariantName` (now visible thanks to the d4f1fea4 runtime-log\nfix). The typed-emit lowerer was generating both Job_R (the named\nalias) and Anon_R_id_name_result_runn\n[…]\ny\nin the typed-emit lowerer. The functional behaviour is unchanged.\n\nVerified: 18-job-queue now passes the verify-live-app scenario\n(every job-type button + history controls click round-trip cleanly).",
          "is_bot": false,
          "headline": "fix(v0.17): 18-job-queue runtime — inline list-element lambdas",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-28T22:58:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d4f1fea4449473a7a267cea971e0e3e20211cd90",
          "body": "The deferred recover in liveApp.safeViewCall was passing a flat []any\nslice as the structured-log context arg, but logEmit expects a\nmap[string]any (the []any branch wasn't handled, so the fields were\nsilently dropped). This made the previous plain-log emission of\nsky.live.view.panic show only `ERRO\n[…]\nspecific to any one example.\nTested by running examples/18-job-queue's job-queue scenario,\nwhich produces a typed-emit list-mapping panic on click → re-render\nthat was previously opaque in server.log.",
          "is_bot": false,
          "headline": "fix(runtime): emit view-panic detail in plain log format",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-28T22:11:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f262e6c2d4db43647b5da0536121cedcd26a0b77",
          "body": "…e cleanup\n\nTwo stabilization fixes that move v0.17 to 26/26 examples building (vs.\nthe 6/13 baseline in docs/v0.17/actual-status-audit.md):\n\n1. **examples/13-skyshop/src/Page/Product.sky** — extracts `parseQty :\n   Int -> String -> Int` helper to isolate `Maybe.withDefault` from\n   the polymorphic \n[…]\nexample-sweep.sh` → 26/26 passed, 0 failed\n  - 13-skyshop go build succeeds (was: `rt.SkyMaybe[int]` vs\n    `rt.SkyMaybe[T1]` mismatch)\n  - Trace stderr spam: 0 occurrences (was: ~thousands per build)",
          "is_bot": false,
          "headline": "fix(v0.17): stabilization — 13-skyshop builds clean + Compile.hs trac…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-28T21:38:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ba0e0f666120d86d902bab79a7dac0b857682cdb",
          "body": "… pipeline plan\n\n## Verdict: PROCEED\n\nArchitecture-Consult agent analyzed the env-thread\nsolvedTypeToGoViaPipelineFlat tactic (roadmap \"Session 3\" / postmortem\nProblem A close). Verdict: PROCEED — tactic sound, callers correctly\nidentified, low regression risk.\n\n## Caller inventory\n\n8-9 direct sites\n[…]\n fallback sites + 2 specs retarget\n\n~4 sessions total.\n\n## Next iteration\n\nStart with Commit 1 verification. The doc lists exact line numbers\n+ cgEnv source for each caller + the 10 specs to retarget.",
          "is_bot": false,
          "headline": "docs(v0.17 Session 4): Architecture-Consult agent report — env-thread…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-28T20:47:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1b76d54c19a5e2c9750ae4e23a3f8a3824fd2d48",
          "body": "## Fix\n\nAdd explicit coerceVia case arms for fixed-width numerics\n(int64, int32, int16, int8, uint, uint16, uint32, uint64, byte,\nrune, float32). Each emits a Go conversion wrapping rt.CoerceInt or\nrt.CoerceFloat: e.g. `int64(rt.CoerceInt(v))`. This handles\nSky.Int → Go.int64 widening for FFI typed \n[…]\nSky stdlib polymorphic\nre-instantiation bug, NOT in Problem B's original symptom class.\nTracked as Session 3h follow-up; doesn't block Session 4\n(env-thread solvedTypeToGoViaPipelineFlat per roadmap).",
          "is_bot": false,
          "headline": "fix(v0.17): coerceVia fixed-width numeric arms — Stripe int64 widening",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-28T19:51:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "874fe17564ef991eadb65267895375be770e970c",
          "body": "## Fix\n\nAdd an FfiT_-alias short-circuit at coerceVia entry (Compile.hs:15821):\nwhen the target goType starts with \"rt.FfiT_\", emit `rt.Coerce[goType]`\ndirectly instead of going through resolveOrErase + eraseScopedCtx.\n\nThe bypass closes the rewrite class where eraseScopedCtx's T-var\nerasure heurist\n[…]\nbstantially shipped. The remaining int/int64 widening is a focused\nstdlib gap, not an architectural reframe. Session 4 (env-thread\n`solvedTypeToGoViaPipelineFlat` per roadmap) can proceed in\nparallel.",
          "is_bot": false,
          "headline": "fix(v0.17): coerceVia FfiT_ alias short-circuit — closes examples 05/11",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-28T19:19:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "65d71c78df88d01b1a2fefb51be27131acb9f40e",
          "body": "…-subst\n\n## Two fixes shipped together\n\n### Fix 1: resolveOrErase 'any' guard (Compile.hs:15716)\n\nWhen HM substitution yields \"any\" (information loss), prefer the\nfallback alias path. Without this guard, the substitution path wins\neven when it loses the alias type info.\n\n### Fix 2: coerceFfiArgViaAl\n[…]\nrgViaAlias. Apply same Nothing-mSrc principle\nthere, or fix at the higher source-type inference layer (don't\ninfer rt.SkyValue for Sky-source Go FFI return types when target\nis a typed wrapper param).",
          "is_bot": false,
          "headline": "fix(v0.17): resolveOrErase 'any' guard + coerceFfiArgViaAlias skip-HM…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-28T18:45:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b8bee4cca8c4722c6ab9e25671ee008bf1f969ad",
          "body": "## Trace of Session 3c residual\n\nAfter Session 3c's params-channel fix, A5 fires correctly but\nemits `rt.Coerce[any](q)` for `Firestore.queryDocuments q ctx` —\nbuild still fails on the typed Go wrapper signature.\n\n## Architecture is correct in 2 of 3 places\n\n1. FFI generator (FfiGen.hs:1546 emitFfiT\n[…]\n Status\n\nBoth layers of Problem B now fully diagnosed. Session 3e:\n- Ship resolveOrErase guard\n- Verify examples 05/11/13 clean-build\n- Continue to Session 4 (env-thread solvedTypeToGoViaPipelineFlat)",
          "is_bot": false,
          "headline": "docs(v0.17 Session 3d): secondary bug — resolveOrErase over-erasure",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-28T18:09:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7e634194ab02186c7a3c22c9177c933a84455f82",
          "body": "A5 typed-FFI dispatch gate now fires for Go_* N-arg calls (was always\nfalling through to bare-name emission). Closes ONE layer of Problem B\nfrom docs/v0.17/stabilization-postmortem.md.\n\n## Root cause (from Session 3b empirical A5 probe)\n\nFor every Go_* Can.VarKernel call in examples/13-skyshop:\n  in\n[…]\nhat this DOES close\n\nArchitectural gap #1 of Problem B: the IORef→ctx migration was\nincomplete; the params channel is now fully threaded through\nEmitCompileCtx + LowerCtx, mirroring the names channel.",
          "is_bot": false,
          "headline": "fix(v0.17): wire _cc_ffiTypedWrapperParams through EmitCompileCtx",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-28T17:38:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5da71c8919555e1bdb8f4b8fad4932ded5551afc",
          "body": "…missing\n\n## Empirical A5 probe (forcing pattern, reverted) result\n\nFor every Go_* Can.VarKernel call in examples/13-skyshop:\n- inSet=True (typed wrapper name IS in `_lc_ffiTypedWrapperNames`)\n- paramTysLen=Nothing (NO entry in `_lc_ffiTypedWrapperParams`)\n\nSo A5 gate fails at the params Map lookup,\n[…]\nimplication\n\nIf this fix is byte-clean: Sessions 4-5 (env-thread\nsolvedTypeToGoViaPipelineFlat + spec retarget) proceed as planned.\nThe 4th-path bug was independent of Problem A's renderer divergence.",
          "is_bot": false,
          "headline": "docs(v0.17 Session 3b): ROOT CAUSE — _cc_ffiTypedWrapperParams field …",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-28T17:02:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "22260258ec7c5b9d5e30f0f71eb3eb05a80f9483",
          "body": "…xprToGoTyped:20586\n\n## Session 2 was wrong (Haskell laziness invalidated the elimination)\n\nSession 2's traces used `let _ = if X then trace ... else ()` patterns.\nThe `_` binding is never demanded, so Haskell's laziness meant the\ntrace expressions never evaluated. The \"ZERO HITS\" on\nBARE-VARKERNEL-\n[…]\nNO compiler code changes. Per CLAUDE.md §0.4 — re-verify before\nre-plan. Session 3 next: trace A5 gate with forcing pattern to\nidentify which condition fails for Go_* kernels, then ship Option A\nor B.",
          "is_bot": false,
          "headline": "docs(v0.17 Session 3): CORRECTION — 4th path is exprToGo:14027, not e…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-28T16:29:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c941e7e303dcd5439c27dc7d5023fbbb64216a47",
          "body": "…20586\n\n## Session 2 — empirical elimination identified the 4th path\n\nPer docs/v0.17/full-close-roadmap.md Session 2 objective: locate the\n4th FFI emission path empirically (not theoretically).\n\n## Method\n\nFour Debug.Trace.trace instrumentations added to Compile.hs (then\nreverted), tagging the four \n[…]\n4 (Session\nmethodology) — plan before execute. Session 2 delivers the\nempirical 4th-path identification. Session 3 ships the fix after\nArchitecture-Consult agent verifies Option B + adversarial grill.",
          "is_bot": false,
          "headline": "docs(v0.17 Session 2): 4th FFI emission path LOCATED — exprToGoTyped:…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-28T15:54:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "39f541f8b8c3bc96b334ed7a49e04a9d50631847",
          "body": "…finding\n\nSession 1 of the v0.17 full-close roadmap per\n`docs/v0.17/full-close-roadmap.md`.\n\n## Phase 0 — Architecture-Consult agent verdict: PROCEED\n\nArchitecture-Consult agent identified 12 dispatch arms routing Sky\nsource kernel calls.  Cited §6 origin category + §7 lever; §8 floor\nnot touched.\n\n\n[…]\n + grilling.\n\n## What this does NOT close\n\nNO code changes to Compile.hs.  Plan before execute per CLAUDE.md\n§0.4.  Session 1's deliverable is the dispatch matrix doc + the\nempirical 4th-path finding.",
          "is_bot": false,
          "headline": "docs(v0.17 Session 1): dispatch coverage matrix + empirical 4th-path …",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-28T15:02:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "33b6f9d0092218ba1f3a42f97e89791e23921c8a",
          "body": "Per user direction 2026-06-28: \"full or close to full arch close, we\nneed known bugs fixed so all examples run correctly with LSP + sky\ncompiler fully working.\"\n\nThis roadmap is the execution complement to:\n  * .claude/AUTONOMOUS_GOAL.md (immutable mandate, 10 criteria)\n  * docs/v0.17/stabilization-\n[…]\named risks with mitigations.\n\n3 questions for user before Session 1 starts: roadmap-shape OK,\nsession-budget OK, branch-protection still holds.\n\nNO code this session.  Plan first.  Per CLAUDE.md §0.4.",
          "is_bot": false,
          "headline": "docs(v0.17): full-close roadmap — 9-session execution plan",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-28T14:30:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "63207ed49740e9096b3c35fb0c9c096fd75c3c53",
          "body": "After the 1d67143b Store-fix attempt (now reverted at fc9c53b7) closed\nthe bundled-console drift check but introduced 10 cabal-test\nregressions, this doc audits the v0.17 work honestly.\n\nThe v0.17 branch has 432 commits since 46b7eaf7 (vs v0.16.x's\naverage 2.5 commits per patch tag).  The unified co\n[…]\nempting #677 before tagging, rebasing to lose 432\ncommits, or starting over.  The architecture has the right ideas;\nthe execution has localised gaps.\n\n4 questions for user direction in the doc footer.",
          "is_bot": false,
          "headline": "docs(v0.17): stabilization postmortem + 3-session plan",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-28T14:21:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fc9c53b7bdada1263e443b6e82cc9fb864bc539e",
          "body": "…Ref\"\n\nThis reverts commit 1d67143bd94783814344a1f3b0b88f0391fc6f8b.",
          "is_bot": false,
          "headline": "Revert \"fix(codegen): solvedTypeToGo reads live cgEnv from scopeState…",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-28T14:11:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d67143bd94783814344a1f3b0b88f0391fc6f8b",
          "body": "The PR-22 S7 collapse of solvedTypeToGo to\nsolvedTypeToGoViaPipelineFlatCtx emptyCgEnv dropped the populated\n_cg_recordAliases registry that mapAliasType's TAlias-arm match\nphase consults BEFORE the runtimeTypedMap bare-name fallback.\nEffect: any user `type alias Foo = { ... }` whose bare name\ncolli\n[…]\nthe assertion\nfails with `Store rt.SkyStore`; post-fix it passes with\n`Store DepStoreModule_Store_R`. Belongs to the same family as\nEntryLocalShadowsDepSpec, which guards a sibling alias-lookup\nclass.",
          "is_bot": false,
          "headline": "fix(codegen): solvedTypeToGo reads live cgEnv from scopeStateRef",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-28T12:59:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "77fef99e4b2a48ce920fbb43fd64a0feced9b730",
          "body": "Task #662 added a sky-build guard that refuses to run in any directory\ncontaining sky-compiler.cabal (would overwrite the compiler binary).\nThe --self-tests loop in scripts/build.sh ran sky build directly on\ntest-files/*.sky paths from repo root, so every invocation post-#662\nfired the guard and rep\n[…]\n compile flows (the guard previously masked them\nby short-circuiting before codegen).  Tracked for v0.17.x.  Removing\na name from KNOWN_FAILURES without a typed-emit fix would silently\nbreak CI again.",
          "is_bot": false,
          "headline": "fix(ci): self-test loop respects v0.17 sky-build repo-root guard",
          "author_name": "Anzel Lai",
          "author_login": "anzellai",
          "committed_at": "2026-06-28T12:00:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 1981,
      "latest_release_at": "2026-07-23T15:28:26Z",
      "latest_release_tag": "v0.17.12",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 20,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 2.2
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 71,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 9,
      "stars": 428,
      "watchers": 5,
      "fork_history": {
        "days": [
          {
            "date": "2026-03-31",
            "count": 1
          },
          {
            "date": "2026-04-06",
            "count": 1
          },
          {
            "date": "2026-04-07",
            "count": 2
          },
          {
            "date": "2026-04-08",
            "count": 1
          },
          {
            "date": "2026-04-10",
            "count": 1
          },
          {
            "date": "2026-04-11",
            "count": 1
          },
          {
            "date": "2026-04-12",
            "count": 1
          },
          {
            "date": "2026-05-30",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 9,
        "total_forks": 9
      },
      "star_history": null,
      "open_issues_and_prs": 7
    },
    "ai_readiness": {
      "has_nix": true,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "legacy-sky-compiler/tsconfig.json"
      ],
      "toolchain_manifests": [
        "legacy-sky-compiler/bootstrap/go.mod",
        "legacy-ts-compiler/interop/go/inspector/go.mod",
        "runtime-go/go.mod",
        "tools/sky-ffi-inspect/go.mod"
      ],
      "largest_source_bytes": 1488544,
      "source_files_sampled": 441,
      "oversized_source_files": 15,
      "agent_instruction_files": [
        "CLAUDE.md",
        "legacy-sky-compiler/bootstrap/runtime/templates/CLAUDE.md",
        "templates/CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 212331
    },
    "dependencies": {
      "manifests": [
        "legacy-sky-compiler/package.json",
        "package.json",
        "runtime-go/go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go",
        "npm"
      ],
      "dependencies": [
        {
          "name": "@types/express",
          "manifest": "legacy-sky-compiler/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.0.6"
        },
        {
          "name": "@types/react",
          "manifest": "legacy-sky-compiler/package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.14"
        },
        {
          "name": "express",
          "manifest": "legacy-sky-compiler/package.json",
          "ecosystem": "npm",
          "version_constraint": "^5.2.1"
        },
        {
          "name": "js-yaml",
          "manifest": "legacy-sky-compiler/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.1.1"
        },
        {
          "name": "koa",
          "manifest": "legacy-sky-compiler/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.1.2"
        },
        {
          "name": "postject",
          "manifest": "legacy-sky-compiler/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.0-alpha.6"
        },
        {
          "name": "react",
          "manifest": "legacy-sky-compiler/package.json",
          "ecosystem": "npm",
          "version_constraint": "^19.2.4"
        },
        {
          "name": "smol-toml",
          "manifest": "legacy-sky-compiler/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.6.0"
        },
        {
          "name": "vscode-languageserver",
          "manifest": "legacy-sky-compiler/package.json",
          "ecosystem": "npm",
          "version_constraint": "^9.0.1"
        },
        {
          "name": "vscode-languageserver-textdocument",
          "manifest": "legacy-sky-compiler/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.12"
        },
        {
          "name": "github.com/BurntSushi/toml",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.0"
        },
        {
          "name": "github.com/alicebob/miniredis/v2",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.37.0"
        },
        {
          "name": "github.com/coder/websocket",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.8.14"
        },
        {
          "name": "github.com/golang-jwt/jwt/v5",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v5.2.1"
        },
        {
          "name": "github.com/google/uuid",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/hashicorp/golang-lru/v2",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.0.7"
        },
        {
          "name": "github.com/jackc/pgx/v5",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v5.9.1"
        },
        {
          "name": "github.com/klauspost/compress",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.17.11"
        },
        {
          "name": "github.com/redis/go-redis/v9",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v9.18.0"
        },
        {
          "name": "github.com/rivo/uniseg",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.4.7"
        },
        {
          "name": "github.com/shopspring/decimal",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.4.0"
        },
        {
          "name": "github.com/webview/webview_go",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20240831120633-6173450d4dd6"
        },
        {
          "name": "go.opentelemetry.io/otel",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.43.0"
        },
        {
          "name": "go.opentelemetry.io/otel/exporters/otlp/otlptrace",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.43.0"
        },
        {
          "name": "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.43.0"
        },
        {
          "name": "go.opentelemetry.io/otel/sdk",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.43.0"
        },
        {
          "name": "go.opentelemetry.io/otel/trace",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.43.0"
        },
        {
          "name": "go.opentelemetry.io/proto/otlp",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.0"
        },
        {
          "name": "golang.org/x/crypto",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.49.0"
        },
        {
          "name": "golang.org/x/term",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.43.0"
        },
        {
          "name": "golang.org/x/text",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.36.0"
        },
        {
          "name": "google.golang.org/protobuf",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.36.11"
        },
        {
          "name": "gopkg.in/yaml.v3",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        },
        {
          "name": "modernc.org/sqlite",
          "manifest": "runtime-go/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.34.1"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 1,
        "merged_prs": 112,
        "open_issues": 6,
        "closed_ratio": 0.76,
        "closed_issues": 19,
        "closed_unmerged_prs": 13
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "anzellai",
          "commits": 1967,
          "avatar_url": "https://avatars.githubusercontent.com/u/6062697?v=4"
        },
        {
          "type": "User",
          "login": "arthurmaciel",
          "commits": 14,
          "avatar_url": "https://avatars.githubusercontent.com/u/305340?v=4"
        },
        {
          "type": "User",
          "login": "TheGB0077",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/39922116?v=4"
        },
        {
          "type": "User",
          "login": "bahalperin",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/8185345?v=4"
        }
      ],
      "contributors_sampled": 4,
      "top_contributor_share": 0.991
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum",
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 9,
            "reason": "binaries present in source code",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 3,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "13 out of 13 merged PRs checked by a CI test -- score normalized to 10",
            "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 1/24 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "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": 10,
            "reason": "project is fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "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 20 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": 10,
            "reason": "packaging workflow 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": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "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": "44 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "e422ce9b317e31c7b1a5eabfa46bb3f4de6a3518",
        "ran_at": "2026-07-23T20:30:13Z",
        "aggregate_score": 4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-23T19:28:20Z",
      "oldest_open_prs": [
        {
          "number": 154,
          "created_at": "2026-07-22T16:14:21Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-21T18:59:37Z",
      "ci_last_conclusion": "FAILURE",
      "oldest_open_issues": [
        {
          "number": 51,
          "created_at": "2026-05-08T20:21:57Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 153,
          "created_at": "2026-07-22T11:10:33Z",
          "last_comment_at": "2026-07-22T11:34:10Z",
          "last_comment_author": "anzellai"
        },
        {
          "number": 155,
          "created_at": "2026-07-22T18:01:42Z",
          "last_comment_at": "2026-07-23T08:33:57Z",
          "last_comment_author": "roovo"
        },
        {
          "number": 156,
          "created_at": "2026-07-23T15:32:45Z",
          "last_comment_at": "2026-07-23T15:46:52Z",
          "last_comment_author": "anzellai"
        },
        {
          "number": 157,
          "created_at": "2026-07-23T15:57:31Z",
          "last_comment_at": "2026-07-23T16:25:58Z",
          "last_comment_author": "anzellai"
        },
        {
          "number": 158,
          "created_at": "2026-07-23T16:01:52Z",
          "last_comment_at": "2026-07-23T17:00:01Z",
          "last_comment_author": "anzellai"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/anzellai/sky",
    "host": "github.com",
    "name": "sky",
    "owner": "anzellai"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 61,
      "inputs": {
        "security": 40,
        "vitality": 83,
        "community": 65,
        "governance": 45,
        "engineering": 71
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 83,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "commits_last_year": 1981,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 20
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "20/52 weeks with commits",
                "points": 13.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 20
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1981 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1981
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 20 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": 90,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v0.17.12",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 2.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~2.2 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 2.2
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "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": "moderate",
        "name": "Community & Adoption",
        "value": 65,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "forks": 9,
              "stars": 428,
              "watchers": 5,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "428 stars",
                "points": 42.7,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 428
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "9 forks",
                "points": 7.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "5 watchers",
                "points": 3.3,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "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": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 45,
        "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": 4,
              "top_contributor_share": 0.991
            },
            "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 99% of commits",
                "points": 0.2,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 99
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "4 contributors",
                "points": 5.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "merged_prs": 112,
              "open_issues": 6,
              "closed_issues": 19,
              "issue_closed_ratio": 0.76,
              "closed_unmerged_prs": 13
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "76% of issues closed",
                "points": 35.5,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 76
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "112/125 decided PRs merged",
                "points": 34.3,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 112,
                      "decided": 125
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 1/24 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "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": 56,
            "inputs": {
              "followers": 26,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "anzellai",
              "public_repos": 58,
              "account_age_days": 4619
            },
            "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": "26 followers of anzellai",
                "points": 10.3,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 26,
                      "login": "anzellai"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "58 public repos, account ~12 yr old",
                "points": 24.9,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 58
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 12
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 71,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "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": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": "13 out of 13 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [
                "compiler",
                "fullstack",
                "functional-programming",
                "go",
                "liveview",
                "lsp",
                "programming-language",
                "server-driven-ui",
                "sse",
                "type-inference",
                "typescript",
                "compiles-to-go",
                "elm-inspired",
                "sky-language",
                "elm",
                "haskell",
                "production-ready-application",
                "sky",
                "sky-lang"
              ],
              "has_wiki": false,
              "homepage": null,
              "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": null,
                "points": 0,
                "status": "missed",
                "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": "19 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 19
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Security",
        "value": 40,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 4
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "binaries present in source code",
                "points": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "13 out of 13 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "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 1/24 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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 fuzzed",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 20 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 detected",
                "points": 5,
                "status": "met",
                "details": [],
                "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": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "44 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "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": 2
            },
            "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": 69,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.98,
              "agent_instruction_files": [
                "CLAUDE.md",
                "legacy-sky-compiler/bootstrap/runtime/templates/CLAUDE.md",
                "templates/CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 212331
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md, legacy-sky-compiler/bootstrap/runtime/templates/CLAUDE.md, templates/CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md, legacy-sky-compiler/bootstrap/runtime/templates/CLAUDE.md, templates/CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "98 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 98,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 58,
            "inputs": {
              "has_nix": true,
              "has_tests": true,
              "lockfiles": [
                "go.sum",
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "legacy-sky-compiler/tsconfig.json"
              ],
              "agent_commit_share": 0.01,
              "toolchain_manifests": [
                "legacy-sky-compiler/bootstrap/go.mod",
                "legacy-ts-compiler/interop/go/inspector/go.mod",
                "runtime-go/go.mod",
                "tools/sky-ffi-inspect/go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "legacy-sky-compiler/bootstrap/go.mod, legacy-ts-compiler/interop/go/inspector/go.mod, runtime-go/go.mod (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "legacy-sky-compiler/bootstrap/go.mod, legacy-ts-compiler/interop/go/inspector/go.mod, runtime-go/go.mod"
                    }
                  }
                ],
                "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": "legacy-sky-compiler/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "legacy-sky-compiler/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, Nix, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, Nix, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "1 of the last 100 commits agent-authored or agent-credited",
                "points": 2,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 1,
                      "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": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 98,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 1488544,
              "source_files_sampled": 441,
              "oversized_source_files": 15
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "15/441 source files over 60KB",
                "points": 53.1,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 441,
                      "oversized": 15
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "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": 0,
                "status": "missed",
                "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": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch npm package 'sky-compiler' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T20:30:32.520088Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/anzellai/sky.svg",
  "full_name": "anzellai/sky",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

Оцінки — це сигнали, а не гарантії. Вони відображають публічно видимі практики на GitHub — це не аудит коду й не гарантія безпеки.

Відсутні дані виключаються, а ваги перенормовуються — нуль за відсутність ніколи не ставиться. Методологія версіонована й відкрита: метрики v1.13.0, схема v0.27.0 — повна методологія · вікі метрик.

Як окремий результат виглядає на тлі всього реєстру: сукупна статистика.