公开记录
软件健康报告模式 0.27.0 · 指标 1.13.0 · 2026-07-23 12:03 UTC

Opus-Aether-AI / pine-transpiler

Transpile Pine Script v5/v6 to executable JavaScript with zero dependencies.

TypeScript · JavaScriptMIT★ 30 星标⑂ 11 复刻始于 2025年12月在 GitHub 上查看 ↗

Opus-Aether-AI/pine-transpiler 的健康指数为 100 分中的 68 分,处于「中等」区间。 其得分最高的类别是Engineering Quality(82/100),最低的是Sustainability & Governance(52/100)。 最近一次更新在 3 天前。 近期的大部分工作由 1 位贡献者完成。

68
总分 / 100
中等

软件健康指数

指标归入加权类别,统一采用 1–100 量表。总体分先取类别加权平均;当公开证据触发高风险司法辖区政策时,评级会按政策调整,并设置 49(有风险)的上限。AI 就绪度不计入总体分。

68
优秀85-100堪称典范;基本满足所有检验标准
良好70-84健康;仅有轻微不足
中等50-69可接受,但存在明显不足;建议进行审查
存在风险30-49存在重大薄弱环节;采用时应保持审慎
危急1-29问题严重(项目被弃置、仅有单一维护者、缺乏基本工程规范)
活力社区与采用可持续性与治理工程质量安全AI 就绪度

评分画像

每条轴代表一个类别。形状比平均值更重要——健康的对象会填满整个图形,而“一峰一谷”式画像意味着某一维度的优势正掩盖另一维度的风险。

所有权

3 关注者3 个公开仓库始于 2025年6月

该仓库由组织支持——共同承担、可问责的托管责任,可延续于任何单一维护者之后。

软件包生态系统

注册表软件包版本月下载量版本数最近发布标签
npm@opus-aether-ai/pine-transpiler0.4.118,9161229 天前pine-scriptchart-hostpinejstranspilercompilertechnical-analysisindicatorschartingtradingfinance

按类别列示的指标

活力

项目是否仍有生命——是否仍在编写代码,是否仍在发布版本?

81良好 · 占总体的 22%
评分方式
36/36推送新近度 — 最近一次推送于 3 天前
4.8/36提交节奏 — 52 周中有 7 周有提交
18/18提交量 — 最近一年 128 次提交
10/10OpenSSF Scorecard:Maintained — 30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year128
human_commit_share0.81
days_since_last_push3
active_weeks_last_year7

发布纪律

100优秀
评分方式
27/27有发布版本 — 已发布 21 个发布版本
36/36发布时效 — 最近一次发布版本于 29 天前
27/27发布节奏 — 约每 3.6 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — 无数据
所用输入
releases_count21
latest_release_tagv0.4.11
releases_from_tags
days_since_latest_release29
mean_days_between_releases3.6
已排除计分(无数据或不适用):OpenSSF Scorecard:Signed-Releases。 其余权重已重新归一化。

社区与采用

项目是否拥有用户、下载量与关注度,并具备欢迎贡献者参与的配置?

62中等 · 占总体的 18%

流行度与采用

32存在风险
评分方式
23.7/60星标 — 30 个星标
8.3/25复刻 — 11 个复刻
0/15关注者 — 1 位关注者
所用输入
forks11
stars30
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

92优秀
评分方式
22.5/22.5README
22.5/22.5许可证 — 可识别的许可证(MIT)
18/18CONTRIBUTING 指南
13.5/13.5行为准则
0/7.2议题模板
6.3/6.3PR 模板
所用输入
has_readme
has_license
has_contributing
has_issue_template
has_code_of_conduct
has_pull_request_template
评分方式
52.7/80月度下载量 — npm 合计每月 8,916 次下载
0/20注册表被依赖数 — 该生态系统不报告此项
所用输入
packages@opus-aether-ai/pine-transpiler
dependents
ecosystemsnpm
total_downloads
monthly_downloads8,916
已排除计分(无数据或不适用):注册表被依赖数。 其余权重已重新归一化。

可持续性与治理

项目能否在其成员之外延续——巴士系数、响应能力、由谁支持,以及软件包的维护状况?

52中等 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
6/22.5提交分布 — 头号贡献者编写了 73% 的提交
2.7/13.5贡献者广度 — 2 位贡献者
10/10OpenSSF Scorecard:Contributors — project has 6 contributing companies or organizations
所用输入
bus_factor1
contributors_sampled2
top_contributor_share0.734
评分方式
23.4/46.8议题解决 — 50% 的议题已关闭
29.4/38.3PR 接受 — 已裁定的 PR 中 50/65 已合并
1.5/15OpenSSF Scorecard:Code-Review — Found 2/18 approved changesets -- score normalized to 1
所用输入
merged_prs50
open_issues1
closed_issues1
issue_closed_ratio0.5
closed_unmerged_prs15
评分方式
30/30所有权背书 — 组织持有
0/20已验证域名
4.3/25所有者影响力 — Opus-Aether-AI 有 3 位关注者
6.5/25既往记录 — 3 个公开仓库,账户约 1 年
所用输入
followers3
owner_typeOrganization
is_verified
owner_loginOpus-Aether-AI
public_repos3
account_age_days390
评分方式
25/25已发布且可解析 — npm 上有 1 个软件包
35/35发布时效 — 最近一次发布于 29 天前
20/20版本历史 — 12 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packages@opus-aether-ai/pine-transpiler
ecosystemsnpm
any_deprecated
min_days_since_publish29

工程质量

基础的工程与文档实践是否到位?

82良好 · 占总体的 20%

工程实践

80良好
评分方式
24/24CI 工作流 — 3 个工作流
24/24存在测试
16/16Linter 配置 — biome.json
0/9.6Pre-commit 钩子
0/6.4.editorconfig
16/20OpenSSF Scorecard:CI-Tests — 25 out of 30 merged PRs checked by a CI test -- score normalized to 8
所用输入
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_config

文档

85优秀
评分方式
30/30README
25/25文档目录
0/15文档 / 主页站点
10/10仓库描述
10/10主题标签 — 11 个主题标签
10/10Wiki
所用输入
topicspine-script, technical-analysis, tradingview, transpiler, typescript, finance, indicators, javascript, parser, pinejs, trading
has_wiki
homepage
has_readme
has_docs_dir
has_description

安全

可见的安全与供应链实践是否稳固,且不存在未解决的高风险司法辖区暴露?

66中等 · 占总体的 16%

安全态势

66中等
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
3.8/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2/2.5CI-Tests — 25 out of 30 merged PRs checked by a CI test -- score normalized to 8
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0.8/7.5Code-Review — Found 2/18 approved changesets -- score normalized to 1
2.5/2.5Contributors — project has 6 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5许可证 — license file detected
7.5/7.5Maintained — 30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
3/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 6
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — 无数据
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate6.6
已排除计分(无数据或不适用):signed_releases。 其余权重已重新归一化。

AI 就绪度

该仓库在多大程度上具备与 AI 编码代理协同开发与维护的条件?这是一枚独立的实验性徽章——权重为 0.0,因此单独呈现,不影响总体健康评分。

60中等 · 占总体的 0%
评分方式
0/45代理指令 — 没有 CLAUDE.md / AGENTS.md / 编辑器规则
0/15机器可读文档(llms.txt)
40/40可读的提交历史 — 81 次人类提交中有 78 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share0.963
agent_instruction_files
agent_instruction_max_bytes
评分方式
0/18一条命令的引导启动
22/22自动化测试
11/11Lint / 格式化配置 — biome.json
11/11静态类型检查 — tsconfig.json
0/10可复现环境
2/10已体现的代理实践 — 最近 100 次提交中有 1 次由代理编写或署名代理
8/8自动化维护 — 最近 100 次提交中有 12 次为自动依赖更新
6/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 6
所用输入
has_nix
has_tests
lockfiles
has_dockerfile
typed_language
bootstrap_files
has_devcontainer
has_linter_config
typecheck_configstsconfig.json
agent_commit_share0.01
toolchain_manifests
dependency_bot_commit_share0.12
评分方式
45/45可类型检查的代码 — TypeScript(静态类型)
54.8/55可控的文件大小 — 采样的 233 个源文件中有 1 个超过 60KB
所用输入
primary_languageTypeScript
largest_source_bytes174,032
source_files_sampled233
oversized_source_files1

关键数据

30GitHub 星标
2贡献者
128最近 12 个月提交数
3距最近推送天数
21发布版本数
1巴士系数(bus factor)
1开放议题
npm软件包生态系统数

数据采集警告

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • No resolved dependencies carried a version and a supported ecosystem

更多细节

Star 与 Fork 历史 0 ★ / 11 ⇿
0Star
11Fork
15发布

每颗 star 和每个 fork 的添加时间,来自 GitHub 并按天汇总。累计增长位于其构成来源——每日新增——的正上方,二者可相互对照:稳定的自然增长与短暂的突增形态截然不同。当这一差别可被衡量时,它会作为增长真实性予以报告。

0246810121112025-122026-032026-07
主版本 0次版本 3修订 12
OpenSSF Scorecard 6.6 / 10
6.6综合

来自开源项目 OpenSSF Scorecard 的独立、工具无关的安全评估。每项检查奖励的是安全实践本身,而非特定供应商的工具。Scorecard 无法判定的检查项标记为 不适用,并从安全评分中剔除(绝不按零分计)。Scorecard v5.5.0 · 2026-07-23 12:02 UTC

10Binary-Artifactsno binaries found in the repo
5Branch-Protectionbranch protection is not maximal on development and all release branches
8CI-Tests25 out of 30 merged PRs checked by a CI test -- score normalized to 8
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
1Code-ReviewFound 2/18 approved changesets -- score normalized to 1
10Contributorsproject has 6 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
6Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 6
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
不适用Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
全部依赖 8

来自 GitHub 依赖图的完整解析依赖集合:0 个直接依赖与 8 个间接(传递)软件包。仓库提交锁文件时,传递闭包才是完整的。

注册表软件包版本关系
npm@biomejs/biome^2.5.3间接
npm@types/bun^1.3.14间接
npm@types/node^26.1.1间接
npm@typescript/typescript6^6.0.2间接
npmbun-types^1.3.14间接
npmtypescript^7.0.2间接
npmvite^8.1.4间接
npmvite-plugin-dts^5.0.3间接
依赖安全公告 未评估

本报告未能完成公告比对:No resolved dependencies carried a version and a supported ecosystem

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [
        "pine-script",
        "technical-analysis",
        "tradingview",
        "transpiler",
        "typescript",
        "finance",
        "indicators",
        "javascript",
        "parser",
        "pinejs",
        "trading"
      ],
      "is_fork": false,
      "size_kb": 1800,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "JavaScript": 179755,
        "TypeScript": 1443717
      },
      "pushed_at": "2026-07-20T00:35:47Z",
      "created_at": "2025-12-01T09:43:57Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-23T10:18:46Z",
      "description": "Transpile Pine Script v5/v6 to executable JavaScript with zero dependencies.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript",
        "JavaScript"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Opus Aether AI",
      "type": "Organization",
      "login": "Opus-Aether-AI",
      "company": null,
      "location": null,
      "followers": 3,
      "avatar_url": "https://avatars.githubusercontent.com/u/218289460?v=4",
      "created_at": "2025-06-27T18:15:07Z",
      "is_verified": null,
      "public_repos": 3,
      "account_age_days": 390
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.4.11",
          "kind": "patch",
          "published_at": "2026-06-23T15:23:27Z"
        },
        {
          "tag": "v0.4.10",
          "kind": "patch",
          "published_at": "2026-06-21T19:28:06Z"
        },
        {
          "tag": "v0.4.9",
          "kind": "patch",
          "published_at": "2026-05-23T10:56:55Z"
        },
        {
          "tag": "v0.4.8",
          "kind": "patch",
          "published_at": "2026-05-22T19:07:34Z"
        },
        {
          "tag": "v0.4.7",
          "kind": "patch",
          "published_at": "2026-05-22T11:04:04Z"
        },
        {
          "tag": "v0.4.6",
          "kind": "patch",
          "published_at": "2026-05-21T23:05:27Z"
        },
        {
          "tag": "v0.4.5",
          "kind": "patch",
          "published_at": "2026-05-21T22:57:24Z"
        },
        {
          "tag": "v0.4.4",
          "kind": "patch",
          "published_at": "2026-05-21T23:08:20Z"
        },
        {
          "tag": "v0.4.3",
          "kind": "patch",
          "published_at": "2026-05-21T22:51:21Z"
        },
        {
          "tag": "v0.4.2",
          "kind": "patch",
          "published_at": "2026-05-21T22:51:20Z"
        },
        {
          "tag": "v0.4.1",
          "kind": "patch",
          "published_at": "2026-05-21T22:51:19Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-05-21T22:51:18Z"
        },
        {
          "tag": "v0.3.1",
          "kind": "patch",
          "published_at": "2026-05-17T01:05:26Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-05-17T00:40:30Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-04-25T06:51:22Z"
        },
        {
          "tag": "v0.1.5",
          "kind": "patch",
          "published_at": "2025-12-02T00:00:22Z"
        },
        {
          "tag": "v0.1.4",
          "kind": "patch",
          "published_at": "2025-12-01T22:35:46Z"
        },
        {
          "tag": "v0.1.3",
          "kind": "patch",
          "published_at": "2025-12-01T20:34:03Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2025-12-01T12:50:20Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2025-12-01T12:26:37Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2025-12-01T11:00:41Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "d543840c87a9ef3c62dbd82071f004754c869f72",
          "body": "* chore(deps): consolidate Dependabot updates\n\nAdopt TypeScript 7 with the official TypeScript 6 compatibility alias for declaration tooling.\n\n* fix(deps): make TypeScript 7 tooling portable",
          "is_bot": false,
          "headline": "chore(deps): consolidate Dependabot updates (#68)",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-07-15T10:35:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b848bfce5390338320bf749e6ee82d54fea559cd",
          "body": "#54 changed color output from transparency-dropping hex to correct\nrgba(). The visual-harness baselines committed by #55 captured the old\nhex output, so combined main drifted to 10 reds. Regenerate the 5\naffected color/fill baselines (bgcolor-zones, fill-bands,\ndrawing-lifecycle, table-scanner, ict-killzones). Both factory paths\nagree (visual mismatch, not parity); gate back to PASS 38 / FAIL 5.",
          "is_bot": false,
          "headline": "test(harness): regenerate visual baselines for rgba color emission (#56)",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-06-23T15:30:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8b55d15b0235010337752f817ed7abaa234b2c7",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.4.11 (#53)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-23T15:23:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8638bbfe5663b73d7347b13d70727f218146a2b2",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Commits](https://github.com/actions/checkout/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/checkout\n  dependency-version: '7'\n  depen\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump actions/checkout from 6 to 7 (#47)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-23T15:20:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7cb3ca10b8c1c532d4bb34ce97151d76c1461df3",
          "body": "…shared runtime (ADR-0001/0002/0003) (#55)\n\n* fix: implement linefill runtime so drawing scripts render (#40)\n\nThe Trading Sessions script (and any script using linefill) rendered\nnothing: `linefill` was unimplemented, so `linefill.new(...)` threw and\nhalted the whole script before any box/line/labe\n[…]\narness:gate wired into .github/workflows/ci.yml as a new step\n- run.ts exposes runVisualHarness() without changing CLI behavior\n\nAdditive; suite 1673/0, harness 38/5, gate exits 0, docs deterministic.",
          "is_bot": false,
          "headline": "refactor: collapse duplicate Pine runtimes into one registry-derived …",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-06-23T15:20:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "49129002a769ff31d9529cff3767a295617c24da",
          "body": "…settings + render) (#54)\n\nTradingView's parseRgb rejects 8-digit hex (#RRGGBBAA), so transparent colors\nbroke the indicator settings color picker AND left box/line bgcolor unparseable\n(nothing rendered). Working built-in indicators use rgba(r, g, b, a) — match that.\n\n- src/colors.ts: shared color p\n[…]\nba(41, 98, 255, 0.15);\n  full Trading Sessions emits only rgba/6-digit, never 8-digit hex\n- refresh snapshots/baselines that embedded the old 8-digit hex\n\nRefs #40. Suite 1657/0, typecheck/lint green.",
          "is_bot": false,
          "headline": "fix(color): emit rgba() for transparent colors, not 8-digit hex (#40 …",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-06-23T15:19:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6791216537be15b01ec8889ac3b77a37bf601858",
          "body": "…e 1) (#52)\n\nThe visual harness (introduced in the closed PR #30, stranded on release/0.4.8)\nis the right tool to catch drawing/parity drift during the runtime consolidation.\nBring it to main as a runnable tool (NOT a CI gate yet — Phase 5 promotes it).\n\n- tests/visual-harness/{run.ts,types.ts,rende\n[…]\nss-status.md as the drift baseline the consolidation\n  drives to green (Std.plot linewidth drift x3; stoch/supertrend non-iterable x2)\n\nNot part of `bun test`; full suite 1622/0, typecheck/lint green.",
          "is_bot": false,
          "headline": "test(harness): bring visual harness onto main as a manual guard (Phas…",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-06-23T06:06:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "046f6fcc2776e98a515ba233e5242abff0904a62",
          "body": "…ase 1) (#51)\n\nCloses the 'wrong math is invisible' gap: TA formulas were computed but never\nchecked for correctness (both factory paths share the impl, so the visual\nparity check can't catch a wrong formula).\n\n- golden-value tests for shipped StdPlus.* (bb/bbw/kc/kcw/hma/mom/macd/wpr/ao)\n  and the \n[…]\n-test from first principles (window-mean SMA,\n  Wilder RMA/RSI, EMA seeding, HMA, %R, ...), NOT copied from the impl under\n  test; warmup-NaN + steady-state both asserted\n\nAdditive; full suite 1637/0.",
          "is_bot": false,
          "headline": "test(golden): TA-math correctness vs independent reference values (Ph…",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-06-23T06:05:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "47850c989e15be356596161888e61de2fe7f9a8c",
          "body": "…rary (Phase 1) (#50)\n\nValidates emitted native Std.* TA calls against the REAL TradingView Host\ncontract (vendored from charting_library.d.ts; context is always LAST) — the\nclass of regression that shipped as #35.\n\n- assert each ta.* emits context-LAST with correct arity (14 functions)\n- ratcheting\n[…]\non/ta.stoch/ta.cum series-vs-scalar) found by the test — fails on\n  a new disagreement OR a silently-fixed one. To resolve during the registry\n  consolidation (ADR-0001).\n\nAdditive; full suite 1637/0.",
          "is_bot": false,
          "headline": "test(contract): host-contract test for Std.* TA calls vs charting_lib…",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-06-23T06:03:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "facf0f6974e5da425f61a6c2c67f41f4e88a0934",
          "body": "The Trading Sessions script (and any script using linefill) rendered\nnothing: `linefill` was unimplemented, so `linefill.new(...)` threw and\nhalted the whole script before any box/line/label could draw.\n\n- implement the `linefill` namespace (new/set_color/delete/get_line1/\n  get_line2) in both runti\n[…]\n is\n  emitted when methods are used\n- regression: full Trading Sessions script runs with no caught error and\n  emits box/line/label/linefill events; named-arg ordering covered\n- rebuild dist\n\nRefs #40",
          "is_bot": false,
          "headline": "fix: implement linefill runtime so drawing scripts render (#40) (#49)",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-06-23T06:03:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eadd2c676e6ba4edc3edf8949715ac3d20155351",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>\nCo-authored-by: Aditya Sharma <79504411+Garou11@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.4.10 (#43)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-21T19:27:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "475a2d43c65ed8dfc73f3f8aad2a376cbf2bfc1f",
          "body": null,
          "is_bot": false,
          "headline": "ci: remove invalid dependabot labels (#46)",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-06-21T19:25:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ca0d34ae45cfa205d31a29bb1d70bfe41e64dd0",
          "body": null,
          "is_bot": false,
          "headline": "fix(ci): parse release-please PR JSON at runtime (#45)",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-06-21T19:24:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da00dc35e52621b3a70f406511a7c811cd02a11d",
          "body": "* test: tighten stdplus review coverage\n\n* test: remove stale stdplus cleanup caches\n\n* test: update stdplus cleanup snapshots",
          "is_bot": false,
          "headline": "test: tighten StdPlus review coverage (#44)",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-06-21T19:24:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "16e7ef28403a983910742f1c3da78b5c323ec2ae",
          "body": "* fix: preserve color input metadata\n\n* test: update color input visual snapshot\n\n* fix: preserve color input transparency\n\n* build: regenerate dist for color input fix\n\n* fix: handle named color rgb inputs\n\n* fix: override color alpha transparency\n\n* fix: resolve color input variable defaults\n\n* fi\n[…]\ne defaults\n\n* fix: require color literal kind for hex defaults\n\n* fix: avoid bare color identifier fallback\n\n---------\n\nCo-authored-by: Ithihas Madala <58927988+ithihasmadala@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: preserve color input metadata (#42)",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-06-16T23:03:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5f11eaf268ac90d5654b40dbcd43c7e2e84e6390",
          "body": "* fix: emit PineJS TA context last\n\n* build: regenerate dist for context order fix\n\n---------\n\nCo-authored-by: Ithihas Madala <58927988+ithihasmadala@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: emit PineJS TA context last (#41)",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-06-16T21:46:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d7a66f4fd17e87260ffbfef8d05a54df44a1c4e8",
          "body": "….3 (#39)\n\nUpdates the requirements on [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) to permit the latest version.\n- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)\n- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/co\n[…]\nependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: Ithihas Madala <58927988+ithihasmadala@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): update @types/node requirement from ^25.9.1 to ^25.9…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-16T21:35:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "919fc36fc59fcfc881ccb5f25d26b8c5e4c96370",
          "body": "Updates the requirements on [vite-plugin-dts](https://github.com/qmhc/unplugin-dts/tree/HEAD/packages/vite-plugin-dts) to permit the latest version.\n- [Release notes](https://github.com/qmhc/unplugin-dts/releases)\n- [Changelog](https://github.com/qmhc/unplugin-dts/blob/main/packages/vite-plugin-dts/\n[…]\nependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: Ithihas Madala <58927988+ithihasmadala@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): update vite-plugin-dts requirement (#38)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-16T21:35:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dd185de5f6c5305688f2dd5d62714ecbee587280",
          "body": "Updates the requirements on [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) to permit the latest version.\n- [Release notes](https://github.com/vitejs/vite/releases)\n- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)\n- [Commits](https://github.com/vitejs\n[…]\nependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: Ithihas Madala <58927988+ithihasmadala@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): update vite requirement from ^8.0.14 to ^8.0.16 (#37)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-16T21:32:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e812bc73283c32278d2753c7ca1f56511ee3ba63",
          "body": "Updates the requirements on [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) to permit the latest version.\n- [Release notes](https://github.com/biomejs/biome/releases)\n- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md)\n-\n[…]\ndency-version: 2.4.16\n  dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): update @biomejs/biome requirement (#36)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-16T21:32:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "115502468a34fd16e7e46d131d285204f3ac2309",
          "body": "…4 (#33)\n\nUpdates the requirements on [@types/bun](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/bun) to permit the latest version.\n- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)\n- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commi\n[…]\ndency-version: 1.3.14\n  dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): update @types/bun requirement from ^1.3.13 to ^1.3.1…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-16T21:28:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "116eafa9115af4905ff8a69aaaafbf4e212e097e",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.4.9 (#32)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-05-23T10:56:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b61b4c5e4d8e2e313177fd62c08a85091911177",
          "body": "TradingView's charting_library `parseIdString` only accepts the\ncanonical `tv-basicstudies-N` bundle name; the bare `basicstudies-N`\nform is rejected with\n\n  Error: unexpected study id: User_<id>@basicstudies-1\n    at w.parseIdString\n    at nv.studiesMetadata\n    at nf.getEnabledTools\n\nwhich surface\n[…]\n9) as a transient workaround; once this\npatch ships in a new pine-transpiler release and the package is\nbumped, that workaround can be removed.\n\nCo-authored-by: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(metainfo): prefix study ids with `tv-basicstudies-N` (#31)",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-05-23T01:10:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8ed67f9fb2b04e77175664c5481c5114d9072f68",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.4.8 (#29)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-05-22T19:07:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b1df4135d7b63a823f5133d7d7813fa6478efcbf",
          "body": "…tes (#28)\n\nPhase 16–18 audit follow-ups and Phase 20 bug fix landing as one\ncoherent quality pass before kicking off Phase 19/20 properly.\n\nRuntime fixes\n- fix(factory): time_tradingday now anchors to the exchange-timezone\n  midnight via __readClockAt instead of JS-local-time setUTCHours(0).\n  Prev\n[…]\n6 net new test cases)\n- corpus:strict: all 25 cases pass within tolerance\n- chart:safety: 0 failures across the 6 contracts\n- corpus:gate: PASS across all lanes/authenticity buckets\n\nRelease-As: 0.4.8",
          "is_bot": false,
          "headline": "feat: corpus + harness polish, top100/200 matrices, and validation ga…",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-05-22T19:04:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d4a9d8bb151fbc9831d7fbfd60ebc3327904ba67",
          "body": "…ase PRs (#27)\n\nConsolidates release detection and publishing into a single workflow run\nso the cross-workflow trigger problem (push: tags: events created by\nGITHUB_TOKEN do not fire downstream workflows) disappears permanently.\nAdds GitHub-native auto-merge on Release PRs so a single feature-PR\nmer\n[…]\nhe primary path fails mid-flight (e.g. one registry\n  up, one down)\n- removed the broken `push: tags:` trigger (GITHUB_TOKEN events do not\n  fire it; that's why v0.4.6 and v0.4.7 never auto-published)",
          "is_bot": false,
          "headline": "ci: merge release-please + publish into one workflow, auto-merge Rele…",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-05-22T11:18:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d3bd49cc6e295e06b7c5f31f37120e88f1222855",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.4.7 (#26)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-05-22T11:03:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6506237f3a34c8082851e8f8d7da69062f0f4f3b",
          "body": "…idation gates (#25)\n\n- normalize top100/top200 target sets to true 100/200 and regenerate matrix docs\n- keep README SEO/legal language while cleaning non-README host references\n- align changelog/test-path naming after runtime-harness renames\n- clean placeholder URL references in docs/source comments\n- verify full stack passes: typecheck, lint, tests, build, corpus, safety gate, and scanner\n\nRelease-As: 0.4.7",
          "is_bot": false,
          "headline": "chore: finalize corpus + harness polish, top100/200 matrices, and val…",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-05-22T11:02:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b5028e40ec6be8f770b4d5f15142989e5fb67157",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.4.6 (#24)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-05-21T23:05:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "348f42da451a7375f46793ca8da81b8f85c96d65",
          "body": "v0.4.5 has shipped (tagged on main + published to npm via local\nbun run release), but the release-please manifest still showed 0.4.4\nas the last-released version. That caused PR #19 to keep proposing a\nphantom 0.4.5 release containing #18+#21+#22 — none of which actually\nwent into the real v0.4.5 (that was PR #20's visual-events parity).\n\nBumping manifest to 0.4.5 makes release-please's next Release PR a\nproper 0.4.6 proposal covering #21 (fix(ci)) + #22 (docs) + whatever\nlands next.",
          "is_bot": false,
          "headline": "chore: bump release-please manifest to 0.4.5 (already published) (#23)",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-05-21T23:00:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ec0273dbe0fd96d32cfde901643388d4d02d151",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(main): release 0.4.5 (#19)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-05-21T22:58:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "947d4ff22ddda833670e80492319d9daec5132fd",
          "body": "…tstrap-sha (#22)\n\nThree historical releases had git tags + npm presence (0.4.4) but no\nCHANGELOG entry. Adding them now so the file matches the published\nrecord before release-please takes over going forward.\n\n## CHANGELOG entries added\n\n- **0.1.5** (2025-12-02): session inputs, bgcolor extraction,\n[…]\nive op the harness wouldn't authorize from\n  the agent; the commands are handed back to the maintainer.\n- Creating the 6 missing GitHub Releases — separate `gh release create`\n  calls, no diff needed.",
          "is_bot": false,
          "headline": "docs: backfill CHANGELOG entries for 0.1.5 / 0.4.4 / 0.4.5 + bump boo…",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-05-21T22:54:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "988650248c108db7dee7f5d5ed3de27439f44550",
          "body": "… correctly (#21)\n\nWithout bootstrap-sha, release-please's first run cannot find a previous\nrelease-please commit on main, so it walks back to genesis and tries to\ninclude every commit since v0.1.0 in the next CHANGELOG entry. PR #19\nwas the symptom — a 0.4.5 release proposal that listed 'implement\n\n[…]\nlives there. The next Release PR will scope to\ncommits AFTER v0.4.4 only — i.e. the feat(ci) from PR #18, the four\nchore(deps) dependabot merges, and whatever feat/fix work lands next\nfrom PR #20 etc.",
          "is_bot": false,
          "headline": "fix(ci): add release-please bootstrap-sha so first run scopes commits…",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-05-21T22:43:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "999230cb5551e1327da321eeb159cc8ec89ea3ea",
          "body": "….1 (#14)\n\nUpdates the requirements on [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) to permit the latest version.\n- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)\n- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/co\n[…]\nependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: Ithihas Madala <58927988+ithihasmadala@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): update @types/node requirement from ^25.6.0 to ^25.9…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-21T22:42:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f0db6ca434f7f4ada72c709758d10a97b778dcc1",
          "body": "Bumps [vite-plugin-dts](https://github.com/qmhc/unplugin-dts/tree/HEAD/packages/vite-plugin-dts) from 4.5.4 to 5.0.1.\n- [Release notes](https://github.com/qmhc/unplugin-dts/releases)\n- [Changelog](https://github.com/qmhc/unplugin-dts/blob/main/packages/vite-plugin-dts/CHANGELOG.md)\n- [Commits](https\n[…]\nrect:development\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): bump vite-plugin-dts from 4.5.4 to 5.0.1 (#17)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-21T22:40:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8e4ca39e794322007032959b63964492c8395d1c",
          "body": "… fix (#20)\n\n* feat(factory): emit __visualEvents from standalone factory output\n\n- indicator-factory: wrap line/box/label/table stubs + visual Std calls\n  in proxies that push canonical events into a shared VisualEmissionContext,\n  matching live-factory emission. Attach __visualEvents and\n  __visua\n[…]\nession: new feature-matrix scan, CSP safety, output parity,\n  visual-events parity, and shared parity test utils — locks\n  standalone output behavior against the live factory.\n\n* chore(release): 0.4.5",
          "is_bot": false,
          "headline": "release: v0.4.5 — standalone __visualEvents parity + method prototype…",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-05-21T22:39:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "292dee26ee78cf1c8c9d0f49f0f7342d69126e8e",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v4...v6)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump actions/checkout from 4 to 6 (#12)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-21T22:36:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b9a7c0ca7f76da9408b3ffa0cdbc748e7d53ccb7",
          "body": "Updates the requirements on [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) to permit the latest version.\n- [Release notes](https://github.com/vitejs/vite/releases)\n- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)\n- [Commits](https://github.com/vitejs\n[…]\ndency-version: 8.0.14\n  dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): update vite requirement from ^8.0.10 to ^8.0.14 (#16)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-21T22:36:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cc75f141ce2ab4f0e135f3d8bd1c151fef403a45",
          "body": "Updates the requirements on [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) to permit the latest version.\n- [Release notes](https://github.com/biomejs/biome/releases)\n- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md)\n-\n[…]\ndency-version: 2.4.15\n  dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): update @biomejs/biome requirement (#15)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-21T22:36:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a73d26aba5e932a58f3dd79413e0f3a4190ddb9a",
          "body": "… (#13)\n\nUpdates the requirements on [bun-types](https://github.com/oven-sh/bun/tree/HEAD/packages/bun-types) to permit the latest version.\n- [Release notes](https://github.com/oven-sh/bun/releases)\n- [Commits](https://github.com/oven-sh/bun/commits/bun-v1.3.14/packages/bun-types)\n\n---\nupdated-depen\n[…]\ndency-version: 1.3.14\n  dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps-dev): update bun-types requirement from ^1.3.13 to ^1.3.14…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-21T22:36:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1ecd42d4071a55ff2b38b3d5a175dc020b95a0da",
          "body": "Closes the \"npm publish via OIDC workflow\" audit P1 from\ndocs/audits/2026-05-21/01-security.md, and replaces the manual\n`bun run release` flow with full end-to-end automation.\n\n## What's new\n\n1. `.github/workflows/release-please.yml`\n   Watches `main` for Conventional Commits. Opens / updates a Rele\n[…]\nne-transpiler`\nthat trusts this repo + `release.yml` + `release` environment. Steps\nin docs/RELEASING.md. The legacy `bun run release` script is kept in\npackage.json as the fallback until that's done.",
          "is_bot": false,
          "headline": "feat(ci): automate releases with release-please + OIDC npm publish (#18)",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-05-21T22:32:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e442da87403fc94b59b3cd43ab830567e970c505",
          "body": "* chore: OSS-readiness pass 1 — docs, hygiene, repo settings\n\nAddresses the P0/P1 OSS items from docs/audits/2026-05-21/. Pure\ndocumentation + GitHub repo hygiene; no source-code changes.\n\n## Docs fixes (P0)\n\n- CONTRIBUTING.md: license line said AGPL-3.0; project is MIT.\n  Fixed to MIT and linked to\n[…]\n-actions PR limit was overkill\n\nThe repo only uses ~2 actions today (actions/checkout,\noven-sh/setup-bun); a limit of 5 was overspecified. Lowered to 3\nwith an inline comment explaining the rationale.",
          "is_bot": false,
          "headline": "chore: OSS-readiness pass 1 — docs, hygiene, repo settings (#10)",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-05-21T22:22:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3bd81159a0231431f0a8cc935391c2791fbaeb42",
          "body": "* fix(generator): scope method prototype lookup to avoid receiver shadowing\n\n- statement-generator: bind prototype to a per-scope local before\n  installing instance methods, so subsequent assignments to the\n  receiver identifier do not break the method-binding emit\n- fixture: drop method_binding fro\n[…]\nings expected\n  signal (now emitted via prototype-var path)\n- add scripts/scan-script.ts + 'scan' package script for ad-hoc\n  standalone-factory smoke runs over .pine fixtures\n\n* chore(release): 0.4.4",
          "is_bot": false,
          "headline": "Release/0.4.4 (#11)",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-05-21T22:10:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c87bbba90a02fade8807754a22db051279fd119f",
          "body": null,
          "is_bot": false,
          "headline": "style: biome auto-format on standalone-factory codegen template",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-05-21T21:25:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eca585bb0cdd2c80979e74783aa2ae7cb2b2e6c1",
          "body": null,
          "is_bot": false,
          "headline": "0.4.3",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-05-21T21:24:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe3afd1a9d82a244f91ad2b71471caae5546ee67",
          "body": "`transpileToStandaloneFactory` now emits a fully self-contained ESM\nmodule that doesn't depend on transpiler internals at chart runtime.\nPreviously the generated code referenced helper functions that lived\nin the transpiler's `dist/` and were unavailable when the factory\nwas built once at deploy tim\n[…]\n runtime. Catches the entire class\n  of \"the string looks right but it doesn't work at runtime\" bugs.\n\n1469/1469 tests pass (was 1425; +44 new — full curated-fixture\nwalk through the standalone path).",
          "is_bot": false,
          "headline": "fix(generator): self-contained standalone factory output",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-05-21T21:24:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "795fec9639608cdd45f8f90ed13ba444e6b129d9",
          "body": "…computed vars\n\n`transpileToStandaloneFactory` previously synthesized the indicator\n`main()` body by emitting computed-variable assignments first, then\nattempting to use them. Pine scripts that called user-defined\nfunctions, methods, or `type` constructors from those computed\nassignments produced Ja\n[…]\n standalone factory output.\n\n1425/1425 tests pass (was 1422; +3 new regression tests).\n\nCHANGELOG updated. Version bumped 0.4.1 → 0.4.2 (patch — bug fix on\na path that strict-CSP consumers depend on).",
          "is_bot": false,
          "headline": "fix(generator): standalone factory emits user-defined symbols before …",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-05-21T20:44:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "202eac10422cab0a50d484e2bd3456eeb1e00f64",
          "body": "Maps personal emails to GitHub noreply aliases so any future-leaked\ncommit metadata displays the noreply form in git log, GitHub UI, and\ncontributor pages.",
          "is_bot": false,
          "headline": "chore: add .mailmap",
          "author_name": "Ithihas",
          "author_login": "ithihasmadala",
          "committed_at": "2026-05-21T20:20:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e71e7e8b3ec92fb8372027ec68e9585d26baab2c",
          "body": null,
          "is_bot": false,
          "headline": "0.4.1",
          "author_name": "Aditya",
          "author_login": "Garou11",
          "committed_at": "2026-05-21T19:47:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a0f07bbecc005bc3fc475f12166461a96c18213",
          "body": "… codegen\n\n`transpileToStandaloneFactory` (the strict-CSP path) crashed at\n`new Function(...)` parse with `SyntaxError: Identifier 'High_Low' has\nalready been declared` on the ICT killzones fixture. Root cause: the\nnative main-body generator emitted Pine variable names directly into\nthe JS preamble,\n[…]\n------\n\n1422/1422 tests pass (was 1420; +2 new regression tests). `dist/`\nrebuilt with the fix; the standalone factory output now produces\nclean JS for ICT killzones and similar drawing-heavy scripts.",
          "is_bot": false,
          "headline": "fix(generator): sanitize + uniquify identifiers in standalone factory…",
          "author_name": "Aditya",
          "author_login": "Garou11",
          "committed_at": "2026-05-21T19:47:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2286989a7fee122129e3d3070d44d79a6181982f",
          "body": null,
          "is_bot": false,
          "headline": "0.4.0",
          "author_name": "Aditya",
          "author_login": "Garou11",
          "committed_at": "2026-05-21T19:37:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "abeea64775f09df5b095d5434db11d78ee6b1fa5",
          "body": "…ted docs\n\nThe README had grown to 651 lines, burying the value prop under API tables,\npipeline diagrams, corpus tooling, and command lists. Hard to scan, hard for\nsearch engines to weight, and the install instructions sat ~60 lines down.\n\nThis is a structural reshuffle, not a content rewrite — ever\n[…]\ne publish docs from the recent release setup.\n\nVerified\n--------\n\n1420/1420 tests pass. No content lost — every link in the new README\npoints at a real doc that contains the content it used to inline.",
          "is_bot": false,
          "headline": "docs: lean SEO-optimized README + split technical content into dedica…",
          "author_name": "Aditya",
          "author_login": "Garou11",
          "committed_at": "2026-05-21T19:32:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "89069fbe6cbdd7b0143385a6753c6854847a073b",
          "body": "Following a safe-harbor review of the project's posture as a public\nopen-source developer tool. Changes are positioning and licensing only;\nno functional code changes.\n\nLicense: AGPL-3.0 → MIT\n----------------------\n\nAGPL was misaligned with this project's actual use case. As a\ndeveloper interoperab\n[…]\nh\nrun.\n\nTests / dist\n------------\n\n1418 / 1418 passing. `dist/` rebuilt so the published bundle's\n\"Generated by\" header points at the renamed package and the LICENSE\nshipped in the tarball is now MIT.",
          "is_bot": false,
          "headline": "docs: legal-safe framing — MIT license, DISCLAIMER.md, scope reframe",
          "author_name": "Aditya",
          "author_login": "Garou11",
          "committed_at": "2026-05-21T17:52:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1c2472aa376dd5fe792a6e06e9172dcd5ca332d1",
          "body": "Publish to BOTH registries from one command. Public npm is the path\nfor external consumers (no auth); GitHub Packages mirrors the same\npackage for org-internal pipelines that already auth against GitHub.\n\nScripts\n-------\n\n- `publish:npm` — explicitly targets public npm (registry.npmjs.org).\n  Runs `\n[…]\nd a \"Releasing\n(maintainers)\" subsection with the `bun run release` flow.\n\nTests\n-----\n\n1417 / 1417 passing. tests/cli/commands.test.ts updated in the prior\nrename commit; carried over here unchanged.",
          "is_bot": false,
          "headline": "chore: dual-registry publish setup (public npm + GitHub Packages)",
          "author_name": "Aditya",
          "author_login": "Garou11",
          "committed_at": "2026-05-21T16:00:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "efe07a1d4b3938e1aaa3315537c9d45147c00b52",
          "body": "GitHub Packages requires the npm scope to exactly match the owning\nGitHub organization (case-insensitive). The repo lives at\n`Opus-Aether-AI/pine-transpiler`, so the package scope must be\n`@opus-aether-ai` (hyphenated). The previous `@opusaether` name was\nnever published anywhere — confirmed via `np\n[…]\n lands\n- `npm publish` (with GitHub Packages auth via PAT) ships v0.3.x to\n  the registry\n- Consumers update package.json from `github:...#sha` ref to\n  `@opus-aether-ai/pine-transpiler@^0.3.x` semver",
          "is_bot": false,
          "headline": "chore: rename package @opusaether → @opus-aether-ai to match GitHub org",
          "author_name": "Aditya",
          "author_login": "Garou11",
          "committed_at": "2026-05-21T15:55:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4295ac9b51d9729dad78d58329a3982c2bcd1d20",
          "body": "…zeRequiredHelpers (#8)\n\nInternal deepening pass. No public-API breakage — every existing\ntop-level export keeps its signature.\n\nThree changes:\n\n1. **src/csp-errors.ts** — single source of truth for CSP-eval error\n   detection. isUnsafeEvalCspError + withCspEvalHint (string-return)\n   + appendCspHin\n[…]\nry and generateStandaloneFactory. The two paths\nproduce semantically different metainfo shapes by design — extracting\na shared builder would spread shape-adapter complexity rather than\nconcentrate it.",
          "is_bot": false,
          "headline": "refactor: v0.3.1 — extract csp-errors, attachPineJsBody, retire analy…",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-05-17T01:04:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2c0d933ba24dba5e0d2f0853eda586aef2b49bfe",
          "body": "Moves the 8 remaining top-level markdown files into docs/ so the\nroot only carries the 4 GitHub-convention files (README, CHANGELOG,\nCONTRIBUTING, CODE_OF_CONDUCT) plus LICENSE:\n\n- docs/CRITICAL_INDICATOR_MATRIX.md\n- docs/DIFFERENTIAL_PARITY_REPORT.md\n- docs/FOREX_XAU_MATRIX.md\n- docs/FUTURE_PARITY_\n[…]\new-top200-matrix.ts\n\nCross-references updated in README.md, CHANGELOG.md,\ndocs/FUTURE_PARITY_ROADMAP.md, src/index.ts,\nsrc/factory/indicator-factory.ts, and\ntests/contract/visual-events-shape.test.ts.",
          "is_bot": false,
          "headline": "docs: move root .md sprawl into docs/, update script output paths (#7)",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-05-17T00:40:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c59d20f68b2cfb5080583e55bbf593adcdfaf0a4",
          "body": "…(#6)\n\nOSS-readiness pass + architectural deepening on top of PR #5's parity\nupgrade. No public-API breakage.\n\nPipeline (src/pipeline.ts) exposes parse, extractMetadata, generateBody,\nbuildFactory, buildStandaloneFactoryCode, compile as composable stages.\ntranspileToPineJS and transpileToStandaloneF\n[…]\nher-AI,\nremoved stale .npmignore. Moved hand-edited reference docs\n(LIMITATIONS.md, CORPUS-BASELINE.md) into docs/ — script-generated\nparity matrices stay in root because scripts/corpus/* write there.",
          "is_bot": false,
          "headline": "feat: v0.3.0 — pipeline API, helper-usage tracker, 95% coverage gate …",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-05-17T00:31:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b07aaa00ec8b4c3abb8bdd3be673d8b174bf04f9",
          "body": "…… (#5)\n\n* feat: major PineScript parity pass with runtime semantics and parity tooling\n\nAdd strict numeric audit and 67-indicator matrix with CI gates.\n\nImplement var/varip persistence, barstate/session/time bindings, and partial request.security passthrough.\n\nUpgrade drawing/table namespaces to st\n[…]\nate const identifiers are handled correctly, verifying that they are transpiled to `var` and do not cause runtime errors.\n\n---------\n\nCo-authored-by: Aditya Sharma <natehiggers@Adityas-Mac-mini.local>",
          "is_bot": false,
          "headline": "feat: major PineScript parity pass with runtime semantics and parity …",
          "author_name": "Aditya Sharma",
          "author_login": "Garou11",
          "committed_at": "2026-05-16T21:31:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2e9f2a89da5c68d6cb32fa247dfb8d65e5dabec0",
          "body": null,
          "is_bot": false,
          "headline": "docs: README install — use GitHub URL until npm publish",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T07:06:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "39bf1ae411071850d53b4562c1bd93c0abc1cd8a",
          "body": null,
          "is_bot": false,
          "headline": "ci: drop leftover vitest/config import from vite.config.ts",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T07:05:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d416b77f3f3643bb223be63707ed7b72ce638c10",
          "body": null,
          "is_bot": false,
          "headline": "ci: drop unsupported --frozen-lockfile=false flag",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T07:04:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2835f96dcc5a943f343db893c5872deea389748d",
          "body": "- Rewrite .github/workflows/ci.yml to use oven-sh/setup-bun\n  (was failing on missing pnpm-lock.yaml since the migration\n  to bun + bun:test in v0.2.0)\n- Scope `lint` to src/ only — scripts/ and tests/ legitimately use\n  console; dist/ is committed for git-URL installs and shouldn't\n  be linted\n- Add `types: [\"node\"]` to tsconfig — process / node:* imports in\n  src/cli/* need explicit node types under bun\n- Add @types/bun devDep\n- Re-organize src/index.ts exports per biome",
          "is_bot": false,
          "headline": "ci: migrate workflow to bun + fix typecheck/lint scope",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T07:03:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b5000aa04994aba8235c652fe8c4f2cb84cd357",
          "body": "34 commits driving real-world Pine pass rate from a fake \"86%\" (silent\nheuristic-masked failures) to an honest 64% on a 92-fixture corpus\nthat includes 52 community scripts scraped from public GitHub repos.\nCurated fixtures: 100% (40/40).\n\nSee CHANGELOG.md for the full v0.2.0 entry.",
          "is_bot": false,
          "headline": "Merge feat/bun-body-corpus-fixes — v0.2.0 corpus-driven correctness pass",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T06:50:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "85d330f61162fb666fcebc3d9a2e59ce4ff7386c",
          "body": null,
          "is_bot": false,
          "headline": "style: formatter pass on scrape.ts (DEST_ROOT join + multi-line strings)",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T06:50:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "62c4ae2edb4d4d22293e5f0b0447a2e65567778c",
          "body": "Bun's git URL install (`github:Opus-Aether-AI/pine-transpiler#v0.2.x`)\nclones the repo and runs the `prepare` script — but does NOT install\ndevDependencies for the cloned package. So `prepare: vite build`\nfails with \"vite: command not found\" and dist/ never materialises in\nthe consumer's `node_modul\n[…]\nrary, not a workspace.\n- Consumers install pre-built JS, not source.\n- npm's `files` allow-list still scopes the published tarball to dist\n  + README + LICENSE, so npm publishers get the same hygiene.",
          "is_bot": false,
          "headline": "chore: ship dist/ in git for v0.2.x consumers using github: install",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T05:56:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5d887a94ecdee03aed91c768eb54794e2032a45f",
          "body": "The 31 commits on this branch — corpus framework, parser/generator\nfixes, wrapper expansion — are a major correctness leap. Cut a 0.2.0\nrelease.\n\n`prepare: vite build` is added so consumers installing via a git URL\n(e.g. `github:Opus-Aether-AI/pine-transpiler#v0.2.0`) auto-build the\ndist/ at install\n[…]\ncutive-if and switch-as-expression parser fixes\n- Lexer line-continuation\n- na(x) is a function call, not a NaN literal\n- Wrapper bindings: 25+ new Pine namespaces / globals\n- bun + bun:test migration",
          "is_bot": false,
          "headline": "chore: bump version 0.1.4 → 0.2.0; add prepare script for git installs",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T05:54:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "48d73796b63b28a8ebe460a19215421a35e0d716",
          "body": "…pass)",
          "is_bot": false,
          "headline": "style: reflow callableProxy + tightened parser whitespace (formatter …",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T05:51:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2af7ccd78a56349ac41266ec60597eac89f36ed2",
          "body": "…ields\n\nTwo coupled changes for Pine v6 user-defined types:\n\n1. parseTypeDefinition's field parser now also recognises user-type\n   field annotations: \\`Imbalance[] imbalance\\`,\n   \\`Imbalance_Settings settings\\`. Previously the parser only matched\n   built-in TYPE_KEYWORDS in field position; user-t\n[…]\n 59/92 because the fixtures using these features hit the\n*next* downstream issue (e.g. \\`FVG_1 is not defined\\` — yet another\nparser symptom), but again the symptom ladder progresses one rung\nper fix.",
          "is_bot": false,
          "headline": "feat(generator+parser): Pine v6 user types support .new() and array f…",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T05:49:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1b6e5b41f80f4c9ec548e839ef54a8a8be162eb8",
          "body": "Pine v6 lets you declare variables typed by a user-defined type:\n  type Imbalance_Settings\n      bool show\n      ...\n\n  Imbalance_Settings htf_1_Settings = Imbalance_Settings.new()\n\nThe parser only recognised the built-in TYPE_KEYWORDS list (\\`int\\`,\n\\`float\\`, \\`bool\\`, \\`color\\`, \\`array\\`, \\`map\\\n[…]\nType.new()\\` which isn't yet stubbed (next layer), but the symptom\nladder progressed: \\`htf_1_Settings is not defined\\` → \\`Settings.new\nis not a function\\`. Each layer peeled is incremental progress.",
          "is_bot": false,
          "headline": "feat(parser): support Pine v6 user-defined type prefixes in declarations",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T05:47:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fadc8e2c06e2f9a4242d2634b84705b02afa312c",
          "body": "Pine v6 has compound-assignment operators, and they're common in\nreal-world scripts:\n  current_cum_vol += volume\n  total -= subtotal\n  count *= 2\n\nThe parser only accepted \\`=\\` and \\`:=\\` after an identifier, so a\ncompound assignment threw the operator-validation error, fell through\nto expression p\n[…]\nsting variable\nrather than declaring a new one). The generator passes the operator\nthrough verbatim; JS supports all of them.\n\nCorpus: 58/92 → **59/92 (64%)**, arunkbhaskar 3/26 → 4/26.\nCurated 40/40.",
          "is_bot": false,
          "headline": "feat(parser): support compound-assignment operators (+= -= *= /= %=)",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T05:45:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b837b5dbfd0bdf7594b7385148e90be9eac2cf56",
          "body": "…ixes\n\n\\`var float[] arr = array.new_float(2)\\` is standard Pine v6 — the\n\\`[]\\` after the type name marks the type as \"array of …\". The parser\nwas reading only the type identifier (\\`float\\`), so the trailing\n\\`[] arr = …\\` confused downstream parsing and the whole declaration\ngot dropped. User cod\n[…]\ndless of declared\nelement type — so consuming and discarding the brackets is enough to\nlet the rest of the declaration parse.\n\nCorpus: 57/92 → **58/92 (63%)**, arunkbhaskar 2/26 → 3/26.\nCurated 40/40.",
          "is_bot": false,
          "headline": "feat(parser): consume Pine v6 \\`float[]\\` / \\`int[]\\` array type suff…",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T05:43:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a76d0c48139b077f46b794ecd4d90441d186ee21",
          "body": "Pine permits multiple typed declarations on a single line:\n  bool ph = false, bool pl = false\n  int prev_ph_bi = na, int prev_pl_bi = na\n\nThe parser was processing only the first one and dropping everything\nafter the comma — so user code that referenced \\`pl\\` or \\`prev_pl_bi\\`\nlater in the script c\n[…]\nuser-vars-not-defined),\nbut the symptom ladder progresses: e.g. ict_equal_highs_and_lows\nnow hits \"ph_arr is not defined\" instead of \"pl is not defined\".\nEach peeled-back layer is a step toward green.",
          "is_bot": false,
          "headline": "feat(parser): support comma-separated typed declarations on one line",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T05:42:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "def3532aea8a16d1214c0e772d283ee6ca469686",
          "body": "…sing\n\nSame bug pattern as parseTernary / parseSwitchStatement / parseIfStatement:\n\\`match(OPERATOR) && previous().value === '='\\` consumes any OPERATOR\nbefore checking, so a non-\\`=\\` operator (rare but legal in Pine\nparameter lists with default-value clauses or type-field initializers)\nsilently co\n[…]\nform. No corpus delta yet because no\nfixture happened to exercise these paths with a non-\\`=\\` operator,\nbut the latent bug would have surfaced on Pine v6 method types with\ndefault-valued type fields.",
          "is_bot": false,
          "headline": "fix(parser): two more match-then-check-value spots in type/method par…",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T05:40:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ea613eee7b08b63bb6c7e1d53ae2428245516430",
          "body": "parseTernary used the same `match(OPERATOR) && previous().value ===\n'?'` pattern that I'd already fixed in parseIfStatement and\nparseSwitchStatement. \\`match\\` consumes any OPERATOR before the value\ncheck; on a non-\\`?\\` operator (e.g. the \\`=\\` in \\`x = switch …\\` or\nthe \\`+\\` between two operands \n[…]\nitch — and any following code\nthat depended on its result — got dropped.\n\nSwitch as RHS / function body now transpiles cleanly. Corpus:\n56/92 → **57/92 (62%)**, everget 4/8 → 6/8 (75%). Curated 40/40.",
          "is_bot": false,
          "headline": "fix(expression-parser): peek-then-advance for ternary `?` operator",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T05:39:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2de4df45b5e51836b279e38d95ca47ef3eb49bfd",
          "body": "Pine v6 supports `const color buyColor = color.blue` as a typed const\ndeclaration. parseStatement only matched `var` and `varip` in the\nkeyword switch, so `const` declarations fell through to expression\nparsing, which then failed and the user variable was silently dropped\nfrom scope. Downstream refe\n[…]\n`kind`\nfield already carries the qualifier through to the generator.\n\nCorpus: 54/92 → **56/92 (61%)**. everget moved from 3/8 → 4/8 (50%);\ntwo other harryguiacorn fixtures also flipped. Curated 40/40.",
          "is_bot": false,
          "headline": "fix(parser): handle Pine v6 'const' keyword as variable-decl introducer",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T05:33:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e720a63442603f4a296f17bd299b3baa8b55b074",
          "body": "…tion\n\nThree more wrapper improvements:\n\n**Callable Pine namespace stubs**: `chart`, `format`, `string`, `ticker`\nwere Proxies that supported member access but not call invocation.\nPine code does `string(NaN)`, `format.price`, etc. and crashed with\n\"X is not a function\". Wrap a function so they're B\n[…]\nespace return an Iterable<NaN> so multi-tf\ndestructure `[a, b, c] = request.security(...)` doesn't crash on\n\"number is not iterable\".\n\nCorpus: 51/92 → **54/92 (59%)**, harryguiacorn 6/17 → 8/17 (47%).",
          "is_bot": false,
          "headline": "feat: callable namespace stubs + str.* methods + JS-reserved sanitiza…",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T05:30:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "02f41bea26824139ab98be9bfea21b4839d67f5d",
          "body": "…tion/text/display)\n\nReal-world Pine routinely references namespace constants like\n`chart.fg_color`, `format.price`, `xloc.bar_index`, `yloc.price`,\n`extend.none`, `position.bottom_left`, `text.align_center`,\n`display.all` etc. Without bindings these throw ReferenceError at\nruntime and the corpus ca\n[…]\nesn't fail with \"number is\n  not iterable\" — it destructures into NaN trio instead.\n\nCorpus: 51/92 → **54/92 (59%)**. harryguiacorn 6/17 → 8/17 (47%).\narunkbhaskar 1/26 → 2/26. Curated holds at 40/40.",
          "is_bot": false,
          "headline": "feat: bind Pine namespaces (chart/format/string/xloc/yloc/extend/posi…",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T05:27:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "eb97b0d2e46b2ebda7316f241d80b406d0dbbca6",
          "body": "Pine has BOTH `na` as a NaN constant AND `na(x)` as a builtin\nfunction (\"is x NaN?\"). The lexer was always tokenizing `na` as the\nNA literal, so `na(close[1])` transpiled to `NaN(close[1])` — JS\ntrying to call NaN as a function, exploding at runtime.\n\nLookahead fix: if the next non-whitespace char a\n[…]\nA. Bare `na` continues to emit as `NaN`.\n\nCorpus: 50/92 → **51/92 (55%)**. harryguiacorn 5/17 → 6/17.\nUpdated the regression test to match the new emit (Std.na for the\ncall form, NaN for the literal).",
          "is_bot": false,
          "headline": "fix(lexer): na(x) is a function call, not a NaN literal",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T05:23:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "566e341f62726145792c9b6e95ce16115e1c54a1",
          "body": "parseIfStatement looked for a trailing `else` clause via:\n  if (this.match(KEYWORD) && this.previous().value === 'else')\n\n`match()` advances unconditionally before the value check, so when the\nNEXT keyword was a sibling `if` (two consecutive ifs at the same\nindent level — very common inside Pine fun\n[…]\nrn 4/17 → 5/17;\nthe rest of the arunkbhaskar fixtures hit different downstream\nfailures (function-body block re-flatten, NaN-as-function, multi-tf\nrequest.security) that are deeper independent issues.",
          "is_bot": false,
          "headline": "fix(parser): two consecutive if-blocks no longer eat the next statement",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T05:18:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7cf13e4f52ecd9cd41f788694d0b22e4b792188a",
          "body": "…ction\n\nPush for higher real-world corpus pass rate. Lots of small fixes;\nscore moved 47/92 → 48/92 (51% → 52%) and curated stayed at 40/40,\nbut the bigger blockers are now visibly the parser's function-body\nblock-flatten bug (separate, deferred change).\n\n**Lexer line continuation** (`src/parser/lex\n[…]\n needs a different mock fallthrough)\n- ~3 `number is not iterable` (multi-output destructuring on a\n  function we didn't register as multi-output)\n- A few edge cases (`'this' as parameter name`, etc.)",
          "is_bot": false,
          "headline": "feat: lexer continuation, let→var, expanded wrapper, helper auto-inje…",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T05:13:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5780fe2bc45e388ab2729dec544e5ad662a73f15",
          "body": "…ess compile-error spam\n\nTwo findings from round-3 reviewers:\n\n**`mapPlotType` missing branches for non-line plot types** (`src/factory/factory-helpers.ts`):\nWith `'char'` added to ParsedPlot.type in round 2, mapPlotType's switch\nfell through to `default: return 0` (line) for shape/char/bg_colorer/\n\n[…]\n still surfaces the failure correctly.\n\n92 fixtures, 47 pass (51%) unchanged; 971 tests pass; tsc clean.\nCurated holds at 40/40.\n\nRound-3 verdict from both reviewers: PASS — no critical/high findings.",
          "is_bot": false,
          "headline": "fix(review-round-3): mapPlotType handles shape/char/bg_colorer; suppr…",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T04:57:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e3b305054df1e9a1efef173b3e334c2c2712d082",
          "body": "Round-2 reviewer findings, all addressed:\n\n**Compilation errors now reach the runner**\n`indicator-factory.ts` previously stubbed `compiledScript = () => {}`\non `new Function(...)` failure, silently producing empty `_plotValues`\non every bar with no error signal. The runner reported a plot-count\nmism\n[…]\nsed this round):\n- Wrapper-param shadowing fix proper (needs scope-aware rename pass)\n- HIGH security: timezone + bg.condition raw-string interpolation in\n  generateNativeMainBody (separate code path)",
          "is_bot": false,
          "headline": "fix(review-round-2): compile errors propagate, plotchar is its own type",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T04:53:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6014accf511c2d96241ff82a2ed01b2eb46d6de0",
          "body": "…params\n\nFindings from four parallel reviewers (security/typescript/silent-failure/\ncode-reviewer). High-impact fixes:\n\n**Type errors in src/factory/indicator-factory.ts** (3 of them):\n  - StudyPlotInfo.type union widened with 'shapes' | 'chars' | 'bg_colorer'\n    so buildPlotsMetadata's return type\n[…]\ner vars named `indicator`,\n    `hline`, etc.) — needs a scope-aware rename pass.\n  - User-variable scope issues (`tt_r is not defined` family) — likely\n    multi-line string concatenation parser bugs.",
          "is_bot": false,
          "headline": "fix(review-round-1): tsc errors, tightened catches, expanded wrapper …",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T04:42:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fa6ecd465fae480a3ff28c18f51eb1de0734207f",
          "body": "…merge\n\nPhase 4. Real-world stress test: 52 v5/v6 scripts pulled from 4\nGitHub repos via `bun scripts/corpus/scrape.ts`, vendored under\ntests/corpus/community/<source>/ with attribution headers. Snapshot\ntests run only against the curated 40; community fixtures are scored\non transpile-success + run-\n[…]\netc. collide\nwith the factory's wrapper params at the JS `new Function()` boundary.\nDocumented in CORPUS-BASELINE.md; fixing it cleanly needs a scope-\naware rename pass and is deferred to a follow-up.",
          "is_bot": false,
          "headline": "test(corpus): scrape 52 real-world Pine scripts; fix for-loop emit + …",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T04:27:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0ca18e77809fd5d992b85a99ca321b24d8ee20c9",
          "body": "The full rapid-improvement pass moved the pass rate to 40/40 fixtures.\nScore history is preserved for reference; the original baseline section\nstays so future readers can see what shifted.",
          "is_bot": false,
          "headline": "docs: update corpus baseline — 80% → 100%",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T04:12:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bfaf5aefa1cbcb932253e9844bcd3fe994c40900",
          "body": "…alue\n\nPhase 3 (corpus sweep). Two bugs that combined to make multi-line Pine\narrow functions like:\n\n  demean(src, len) =>\n      src - ta.sma(src, len)\n  plot(demean(close, 20))\n\nemit broken JS — the function's body had no `return` and the binary\nexpression's `-` operator was silently swallowed by t\n[…]\nom FAIL → PASS, taking\nthe score from 98% → **100% (40/40)**. The snapshot now reads\n`return (src - Std.sma(context, src, len))` instead of the previous\nmangled `let src = Std.sma(context, src, len)`.",
          "is_bot": false,
          "headline": "fix(parser+generator): multi-line user functions now return correct v…",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T04:07:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b1594118360975feeb64d62dab04cfce0a3d3656",
          "body": "…orer\n\nPhase 2.1–2.3. buildPlotsMetadata previously coerced every parsed plot\ninto 'line' or 'histogram', so plotshape/plotchar/bgcolor calls all\nshowed up as line plots on the chart — i.e. they didn't render as\nshapes, didn't background-color the chart, just produced extra invisible\nlines. Pine sou\n[…]\novement plan).\n\nCorpus score holds at 98% — drawing fixtures (16 plotshape, 17 plotchar,\n18 bgcolor, 19 fill) were already passing on count and now produce\ncorrectly-typed metainfo for the real chart.",
          "is_bot": false,
          "headline": "feat(factory): emit correct PineJS plot types for shapes/chars/bg_col…",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T04:04:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fa7347371e3a2b5c616867894e345ad761037955",
          "body": "Phase 1.5. Until now barstate.islast / isnew / isrealtime / isconfirmed\nreturned hardcoded values regardless of the current bar (visible in\nruntime warnings: \"barstate.X returns hardcoded — actual bar state\ndetection not implemented\"). Indicators that branch on barstate (e.g.\n'only count crossovers \n[…]\nempty\ncontext (legacy behaviour) so existing callers don't break.\n\nCorpus score holds at 98% — none of the 40 fixtures exercise barstate\ndirectly. The change is correctness for indicators in the wild.",
          "is_bot": false,
          "headline": "feat(runtime): real barstate.* driven by per-bar context",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T04:03:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dae155179e7631b6d84554954aca7f866908f720",
          "body": "…rend aliases\n\nPhase 1.4. Today MULTI_OUTPUT_MAPPINGS covered only ta.macd and ta.dmi,\neven though several Pine functions are commonly destructured:\n\n  [basis, upper, lower] = ta.bb(close, 20, 2.0)\n  [basis, upper, lower] = ta.bbands(close, 20, 2.0)  ← alias of bb\n  [basis, upper, lower] = ta.kc(clo\n[…]\no the destructure-on-NaN failure\nmode no longer hides behind the catch fallback. Corpus score holds at\n98% but the stoch/supertrend fixtures are now real passes instead of\nNaN-array-from-catch passes.",
          "is_bot": false,
          "headline": "feat(mappings): expand multi-output registry with bb/bbands/kc/supert…",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T04:00:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5343a5c46c11d9533bdd0ed12e1d33743acece9a",
          "body": "Phase 1.2 + 1.3. The mapping registry already had ARRAY_FUNCTION_MAPPINGS\nemitting `_arrayPush(...)` / `_arraySize(...)` / etc., but the helper\nfunction definitions in ARRAY_HELPER_FUNCTIONS were never injected into\nthe factory's preamble — so the body referenced symbols that didn't\nexist, the scrip\n[…]\nand produce real values, which is what\nmatters end-to-end against the real chart.\n\nSnapshot diffs in tests/corpus/snapshots/12,13,14,15 show the helpers\ninlined into the body alongside the Pine logic.",
          "is_bot": false,
          "headline": "feat(mappings): wire array.* + Pine v6 map.* helpers into preamble",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T03:58:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a9b10bef62d768dedfa2d74bc21dbc58e9cdfe31",
          "body": "Phase 1.1 of the rapid-improvement plan. The polyfills for HMA, MACD,\nWPR, and AO cached derived series on ctx (e.g. ctx._macd_series) and\non subsequent bars called series.set(value) instead of new_var().\nPineSeries.set() OVERWRITES the latest history slot — it doesn't\nappend — so the cached series \n[…]\nACD\nhistogram / HMA / AO output values are now stable across bars\ninstead of NaN / stuck at bar 1, which is what users actually see\non a chart). End-to-end webapp verification will confirm in Phase 2.",
          "is_bot": false,
          "headline": "fix(stdlib): use ctx.new_var per-bar instead of manual ctx caches",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T03:55:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "33b39ae0ce431031b9dc03f14f38ec7a2ae3ec24",
          "body": "Pine source `plot(close, color=color.purple)` was being emitted as\n`Std.plot(close, color = color.purple)`. JavaScript reads the third\nargument as an *assignment expression* that rewrites the local\n`color` identifier (the COLOR_MAP injected by the factory wrapper)\nto a single hex string. The next ca\n[…]\nm-function) is a separate\nparser bug in multi-line arrow function bodies — surfaced by the\ncorpus, deferred to a follow-up.\n\n5 regression tests in tests/regression/named-args.test.ts pin the\ncontract.",
          "is_bot": false,
          "headline": "fix(generator): drop named arguments from runtime call emit",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T03:50:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5be5ad93891524ae6ee09f164d2bf0db94c37b1f",
          "body": "Phase 0.3 + 0.4. Drops a 40-script corpus covering the surface area\nthe rapid-improvement plan targets: trivial smoke, MA/oscillator/\nvolatility/trend indicators, multi-output destructuring, var/varip,\ncontrol flow, arrays, maps, drawing primitives (plotshape/plotchar/\nbgcolor/fill/hline), source/co\n[…]\ne 1 alongside the StdPlus persistence work.\n\nTwo new helper scripts:\n- scripts/corpus/per-fixture.ts → one-line PASS/FAIL per fixture\n- scripts/corpus/debug-fixture.ts → single-fixture deep inspection",
          "is_bot": false,
          "headline": "test(corpus): seed 40 Pine fixtures + capture 80% baseline",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T03:42:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d84a3c20f58b5949fc2774a4fc6e9e1b62da1e49",
          "body": "- scripts/corpus/report.ts: walks fixtures, runs each through the\n  pipeline, and prints a single-page markdown summary with score,\n  transpile/runtime failure groups, and the unimplemented Std-call\n  list. Reads, doesn't gate.\n- bun run corpus → the report\n- bun run corpus:snap → UPDATE_SNAPSHOTS=1\n[…]\n the\n  env var is set)\n\nWith zero fixtures, `corpus` prints a clear \"seed via Phase 0.3\"\nmessage and exits 1; `corpus:snap` is a no-op. Phase 0.3 will\nseed ~40 fixtures and produce the first baseline.",
          "is_bot": false,
          "headline": "test(corpus): add report + snapshot tooling",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T03:30:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3bd2d1610366b2f456cdc2ef268b3cf64e0a3e4d",
          "body": "Lays the foundation for corpus-driven snapshot tests against real Pine\nscripts. The walker is intentionally tolerant: a fixture that fails\nruntime is recorded in a structured CorpusResult, not surfaced as a\nsuite failure — we want the corpus to be a backlog driver, not a\ngatekeeper.\n\n- mock-runtime.\n[…]\n; Phase 0.2 will add the report script.\nWith zero fixtures the test is a no-op (1 pass + 1 skip) so this lands\nahead of the seed.\n\nAlso: gitignore bun.lock — bun resolves from the consuming workspace.",
          "is_bot": false,
          "headline": "test(corpus): scaffold corpus runner + mock PineJS runtime",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T03:28:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3fad614439b2aa76536e20ebc8b7d1722e93b916",
          "body": "Editor consumers (e.g. an \"edit Pine, see compiled JS\" diptych) need\nto render the literal transpiled body rather than the factory's\ntoString(), which only shows the wrapper closure. Attach the body\nas a non-enumerable, read-only property on the returned factory:\n\n- transpileToPineJS path → preamble\n[…]\nmance tests in tests/factory/body-exposure.test.ts pin the\ncontract: presence, non-enumerability, distinctness across sources,\nand that exposing the body is non-destructive (factory remains callable).",
          "is_bot": false,
          "headline": "feat: expose transpiled JS body via non-enumerable __pineJsBody",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T03:22:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2bc1773e786711d13d9ef26a8655323b15170b5c",
          "body": "Replace `from 'vitest'` with `from 'bun:test'` across all 21 test files.\nThe bun:test API is a near-drop-in for vitest's `describe/expect/it`,\nso no other changes were needed in test bodies. Coverage now goes\nthrough `bun test --coverage` (see scripts in the previous commit).",
          "is_bot": false,
          "headline": "chore(tests): migrate from vitest to bun:test",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T03:22:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74ec2e2f5d343da3e0cd0d4b6bd951a0e6180908",
          "body": "- Drop prepare hook (pnpm build); not needed for vendored consumption\n- start: node ./dist/cli/index.js → bun ./dist/cli/index.js\n- test: vitest run → bun test tests/\n- test:coverage: vitest run --coverage → bun test --coverage tests/\n- Drop @vitest/coverage-v8 + vitest devDeps; add bun-types\n- Bump @biomejs/biome 2.3.8 → ^2.4.13\n- Bump @types/node ^24.10.1 → ^25.6.0\n- Bump typescript ^5.9.3 → ^6.0.3\n- Bump vite ^7.2.6 → ^8.0.10\n- Drop pnpm-lock.yaml; bun resolves from the consuming workspace",
          "is_bot": false,
          "headline": "chore: migrate from pnpm + vitest to bun",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2026-04-25T03:21:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d38481027d73208494d1e425b7caa58ae59dc0c6",
          "body": "* feat: add support for session inputs and bgcolor functionality\n\n- Introduced `input.session` type in InputExtractor to handle session inputs with default value.\n- Enhanced MetadataVisitor to track session variables, derived session variables, and computed variables.\n- Implemented bgcolor extractio\n[…]\nPlot and ParsedBgcolor interfaces to support new features.\n\n* test: add comprehensive tests for indicator factory generation\n\n* refactor: improve code formatting and organization across multiple files",
          "is_bot": false,
          "headline": "Fix/issues with transpiling (#3)",
          "author_name": "Ithihas Madala",
          "author_login": "ithihasmadala",
          "committed_at": "2025-12-01T23:59:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 21,
      "commits_last_year": 128,
      "latest_release_at": "2026-06-23T15:23:27Z",
      "latest_release_tag": "v0.4.11",
      "releases_from_tags": false,
      "days_since_last_push": 3,
      "active_weeks_last_year": 7,
      "days_since_latest_release": 29,
      "mean_days_between_releases": 3.6
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 87,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "@opus-aether-ai/pine-transpiler",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "pine-script",
            "chart-host",
            "pinejs",
            "transpiler",
            "compiler",
            "technical-analysis",
            "indicators",
            "charting",
            "trading",
            "finance"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@opus-aether-ai/pine-transpiler",
          "is_deprecated": false,
          "latest_version": "0.4.11",
          "repository_url": "https://github.com/Opus-Aether-AI/pine-transpiler",
          "versions_count": 12,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 3,
          "monthly_downloads": 8916,
          "first_published_at": "2026-05-21T16:22:16.504000Z",
          "latest_published_at": "2026-06-23T15:24:48.271000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 29
        }
      ]
    },
    "popularity": {
      "forks": 11,
      "stars": 30,
      "watchers": 1,
      "fork_history": {
        "days": [
          {
            "date": "2025-12-06",
            "count": 1
          },
          {
            "date": "2026-01-11",
            "count": 1
          },
          {
            "date": "2026-02-27",
            "count": 1
          },
          {
            "date": "2026-03-02",
            "count": 1
          },
          {
            "date": "2026-03-22",
            "count": 1
          },
          {
            "date": "2026-04-02",
            "count": 1
          },
          {
            "date": "2026-05-04",
            "count": 1
          },
          {
            "date": "2026-05-12",
            "count": 1
          },
          {
            "date": "2026-05-22",
            "count": 1
          },
          {
            "date": "2026-05-26",
            "count": 1
          },
          {
            "date": "2026-07-14",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 11,
        "total_forks": 11
      },
      "star_history": null,
      "open_issues_and_prs": 4
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 174032,
      "source_files_sampled": 233,
      "oversized_source_files": 1,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": "No resolved dependencies carried a version and a supported ecosystem",
        "scope": "repository_graph",
        "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": 8,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "@biomejs/biome",
            "direct": false,
            "version": "^2.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/bun",
            "direct": false,
            "version": "^1.3.14",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "^26.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/typescript6",
            "direct": false,
            "version": "^6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "bun-types",
            "direct": false,
            "version": "^1.3.14",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "^7.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "vite",
            "direct": false,
            "version": "^8.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "vite-plugin-dts",
            "direct": false,
            "version": "^5.0.3",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 8,
        "direct_count": 0,
        "indirect_count": 8
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 3,
        "merged_prs": 50,
        "open_issues": 1,
        "closed_ratio": 0.5,
        "closed_issues": 1,
        "closed_unmerged_prs": 15
      },
      "bus_factor": 1,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "ithihasmadala",
          "commits": 80,
          "avatar_url": "https://avatars.githubusercontent.com/u/58927988?v=4"
        },
        {
          "type": "User",
          "login": "Garou11",
          "commits": 29,
          "avatar_url": "https://avatars.githubusercontent.com/u/79504411?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.734
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release-please.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        "biome.json"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 5,
            "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": 8,
            "reason": "25 out of 30 merged PRs checked by a CI test -- score normalized to 8",
            "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": 1,
            "reason": "Found 2/18 approved changesets -- score normalized to 1",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 6 contributing companies or organizations",
            "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": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not 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 2 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": 6,
            "reason": "dependency not pinned by hash detected -- score normalized to 6",
            "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": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "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": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "d543840c87a9ef3c62dbd82071f004754c869f72",
        "ran_at": "2026-07-23T12:02:49Z",
        "aggregate_score": 6.6,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-20T00:35:50Z",
      "oldest_open_prs": [
        {
          "number": 69,
          "created_at": "2026-07-20T00:35:24Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 70,
          "created_at": "2026-07-20T00:35:40Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 71,
          "created_at": "2026-07-20T00:35:47Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-15T10:35:26Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 40,
          "created_at": "2026-06-12T05:48:27Z",
          "last_comment_at": "2026-07-12T06:26:30Z",
          "last_comment_author": "ZilleHusnain7833"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/Opus-Aether-AI/pine-transpiler",
    "host": "github.com",
    "name": "pine-transpiler",
    "owner": "Opus-Aether-AI"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 68,
      "inputs": {
        "security": 66,
        "vitality": 81,
        "community": 62,
        "governance": 52,
        "engineering": 82
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 81,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 69,
            "inputs": {
              "commits_last_year": 128,
              "human_commit_share": 0.81,
              "days_since_last_push": 3,
              "active_weeks_last_year": 7
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 3 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "7/52 weeks with commits",
                "points": 4.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "128 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 128
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 2 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": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 21,
              "latest_release_tag": "v0.4.11",
              "releases_from_tags": false,
              "days_since_latest_release": 29,
              "mean_days_between_releases": 3.6
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "21 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 21
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 29 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 29
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~3.6 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 3.6
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 8,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 8 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 62,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 32,
            "inputs": {
              "forks": 11,
              "stars": 30,
              "watchers": 1,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "30 stars",
                "points": 23.7,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 30
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "11 forks",
                "points": 8.3,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 11
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "excellent",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "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 (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "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": 13.5,
                "status": "met",
                "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
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 66,
            "inputs": {
              "packages": [
                "@opus-aether-ai/pine-transpiler"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 8916
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "8,916 downloads/month across npm",
                "points": 52.7,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 8916,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 52,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 28,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.734
            },
            "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 73% of commits",
                "points": 6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 73
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 6 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "merged_prs": 50,
              "open_issues": 1,
              "closed_issues": 1,
              "issue_closed_ratio": 0.5,
              "closed_unmerged_prs": 15
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "50% of issues closed",
                "points": 23.4,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 50
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "50/65 decided PRs merged",
                "points": 29.4,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 50,
                      "decided": 65
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 2/18 approved changesets -- score normalized to 1",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 41,
            "inputs": {
              "followers": 3,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "Opus-Aether-AI",
              "public_repos": 3,
              "account_age_days": 390
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "3 followers of Opus-Aether-AI",
                "points": 4.3,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 3,
                      "login": "Opus-Aether-AI"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "3 public repos, account ~1 yr old",
                "points": 6.5,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 3
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 1
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "@opus-aether-ai/pine-transpiler"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 29
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 29 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 29
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "12 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 82,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": "biome.json",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "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": "25 out of 30 merged PRs checked by a CI test -- score normalized to 8",
                "points": 16,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "topics": [
                "pine-script",
                "technical-analysis",
                "tradingview",
                "transpiler",
                "typescript",
                "finance",
                "indicators",
                "javascript",
                "parser",
                "pinejs",
                "trading"
              ],
              "has_wiki": true,
              "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": "11 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 11
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 66,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 66,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 6.6
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 3.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "25 out of 30 merged PRs checked by a CI test -- score normalized to 8",
                "points": 2,
                "status": "partial",
                "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 2/18 approved changesets -- score normalized to 1",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 6 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "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": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "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 2 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 6",
                "points": 3,
                "status": "partial",
                "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 detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "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": 6
            },
            "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": 60,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.963,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "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": "78 of 81 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 78,
                      "sampled": 81
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "tsconfig.json"
              ],
              "agent_commit_share": 0.01,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.12
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "biome.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "12 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 12,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 6",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 174032,
              "source_files_sampled": 233,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/233 source files over 60KB",
                "points": 54.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 233,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "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",
    "No resolved dependencies carried a version and a supported ecosystem"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T12:03:08.422567Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/o/Opus-Aether-AI/pine-transpiler.svg",
  "full_name": "Opus-Aether-AI/pine-transpiler",
  "license_state": "standard",
  "license_spdx": "MIT"
}

评分是信号,而非担保。 评分反映的是 GitHub 上公开可见的实践——不是代码审计,也不是安全保证。

缺失数据将被剔除并重新归一化权重,绝不按零分计。方法论已版本化并公开:指标 v1.13.0、模式 v0.27.0—— 完整方法论 · 指标知识库.

单项结果在整体记录中的位置: 汇总统计npm.