Public record
Software health reportschema 0.27.0 · metrics 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 stars⑂ 9 forkssince Mar 2026View on GitHub ↗

anzellai/sky holds a health index of 61 out of 100, placing it in the Moderate band. It scores highest on Vitality (83/100) and lowest on Security (40/100). It was last updated today. A single contributor accounts for most of its recent work.

61
overall / 100
Moderate

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

61
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

Anzel LaiPersonal account
26 followers58 public repossince Nov 2013

This repository is owned by a personal account. A single-owner project carries more continuity risk than an organization-backed one.

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

83Good · 22% of overall
How it's scored
36/36Push recency — last push 0 days ago
13.8/36Commit cadence — 20/52 weeks with commits
18/18Commit volume — 1,981 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year1,981
human_commit_share1
days_since_last_push0
active_weeks_last_year20
How it's scored
27/27Ships releases — 100 releases published
36/36Release recency — latest release 0 days ago
27/27Release cadence — a release every ~2.2 days
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Inputs used
releases_count100
latest_release_tagv0.17.12
releases_from_tagsno
days_since_latest_release0
mean_days_between_releases2.2

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

65Moderate · 18% of overall
How it's scored
42.7/60Stars — 428 stars
7.5/25Forks — 9 forks
3.3/15Watchers — 5 watchers
Inputs used
forks9
stars428
watchers5
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (Apache-2.0)
18/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
6.3/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingyes
has_issue_templateno
has_code_of_conductno
has_pull_request_templateyes

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

45At risk · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
0.2/22.5Commit distribution — top contributor authored 99% of commits
5.4/13.5Contributor breadth — 4 contributors
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Inputs used
bus_factor1
contributors_sampled4
top_contributor_share0.991
How it's scored
35.5/46.8Issue resolution — 76% of issues closed
34.3/38.3PR acceptance — 112/125 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 1/24 approved changesets -- score normalized to 0
Inputs used
merged_prs112
open_issues6
closed_issues19
issue_closed_ratio0.76
closed_unmerged_prs13
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
10.3/25Owner reach — 26 followers of anzellai
24.9/25Track record — 58 public repos, account ~12 yr old
Inputs used
followers26
owner_typeUser
is_verified
owner_loginanzellai
public_repos58
account_age_days4,619
Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.

Engineering Quality

Are baseline engineering and documentation practices in place?

71Good · 20% of overall
How it's scored
24/24CI workflows — 2 workflow(s)
24/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 13 out of 13 merged PRs checked by a CI test -- score normalized to 10
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configno
has_precommit_configno
How it's scored
30/30README
25/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
10/10Topics — 19 topics
0/10Wiki
Inputs used
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_wikino
homepage
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

40At risk · 16% of overall
How it's scored
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.5License — 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
Inputs used
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate4

AI Readiness

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.

69Moderate · 0% of overall
How it's scored
45/45Agent instructions — CLAUDE.md, legacy-sky-compiler/bootstrap/runtime/templates/CLAUDE.md, templates/CLAUDE.md
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 98 of 100 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.98
agent_instruction_filesCLAUDE.md, legacy-sky-compiler/bootstrap/runtime/templates/CLAUDE.md, templates/CLAUDE.md
agent_instruction_max_bytes212,331
How it's scored
12.6/18One-command bootstrap — legacy-sky-compiler/bootstrap/go.mod, legacy-ts-compiler/interop/go/inspector/go.mod, runtime-go/go.mod (toolchain convention, no task runner)
22/22Automated tests
0/11Lint / format config
11/11Static type checking — legacy-sky-compiler/tsconfig.json
10/10Reproducible environment — Dockerfile, Nix, lockfile
2/10Demonstrated agent practice — 1 of the last 100 commits agent-authored or agent-credited
0/8Automated maintenance — no automated dependency updates observed
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixyes
has_testsyes
lockfilesgo.sum, package-lock.json
has_dockerfileyes
typed_languageyes
bootstrap_files
has_devcontainerno
has_linter_configno
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
How it's scored
45/45Type-checkable code — Go (statically typed)
53.1/55Manageable file sizes — 15/441 source files over 60KB
Inputs used
primary_languageGo
largest_source_bytes1,488,544
source_files_sampled441
oversized_source_files15
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
0/20MCP server
40/40Runnable examples — examples
Inputs used
example_dirsexamples
has_mcp_signalno
api_schema_files

Key facts

428GitHub stars
4contributors
1,981commits, last 12 months
0days since last push
100releases
1bus factor
6open issues
Go, npmpackage ecosystems

Data collection 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

More detail

Star and fork history 0 ★ / 9 ⇿
0Stars
9Forks
30Releases

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

0246810922026-032026-042026-05
Major 0Minor 1Patch 29
OpenSSF Scorecard 4.0 / 10
4.0aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).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
Direct dependencies 34
RegistryPackageVersion constraintManifest
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
All dependencies not collected

The resolved dependency set could not be collected for this report: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Raw JSON report machine-readable
{
  "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"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statistics.