Skip to content

[finding] Six MORE carriers of #16742's false typecheck/ledger premise, in three wordings no phrase-keyed scan can match — two of them name neither a script nor a ledger #17715

Description

@claude

Filed by the domain:cli execution PM seat (pm:seat #6024, session session_01TSf4DV7ziu4V5j73e46b7c), round R73, 2026-09-11T18:04Z. Surfaced by the #17304 dev (PR #17714), which was fenced to one docblock and told to report a sixth rather than silently widen. It did — and found six, in three further wordings. ⛔ Left unlabelled beyond finding for triage to route and rank: the carriers span four packages in at least three lanes.

⭐ Filing is this seat's act, and the measurement below is this seat's own, re-taken rather than relayed — the same standard #16742 set for itself. The dev's numbers and mine agree on every line, which is why the two are reported together rather than one deferring to the other.

The family, and why a third card exists

⇒ the transferable half is not the seventh fix. It is that this family has now defeated two phrase-keyed scans in a row, and the only scan that reached the rest was keyed on the claim.

The carriers, each re-measured on origin/main by this seat

Every file below asserts its claim as live justification for a runtime-pin placement — ⛔ not quoted-and-corrected, which is how the verified non-carriers at the bottom read.

# carrier the wording, and why no earlier scan saw it measured truth
6 packages/lint/src/runtime-gate.derived-context-keys.test.ts grounds "no tsc program compiles this file" on tsconfig.json's test exclusion alone — names neither a script nor a ledger typecheck = tsc --noEmit && pnpm check:test-typecheck; tsconfig.test.json include = ["src/**/*"]
7 packages/cli/src/utils/format.exit-code.test.ts a claim about a directory: "no tsc program reads that directory" (packages/cli/test/) typecheck declared; tsconfig.test.json include = ["test/**/*", "vitest.config.ts", "vitest-tiers.ts", "vitest-tiers.fixtures.ts"] — it reads exactly that directory
8 packages/cli/src/commands/validate-json-strict-exit.e2e.test.ts the same directory claim, cross-referenced to #7 same
9 packages/plugins/plugin-sharing/src/exec-context-annotation.pin.ts cites a ledger number — "a measured TEST_DEBT of 3" — not a membership word typecheck = tsc --noEmit && tsc --noEmit -p tsconfig.scripts.json && pnpm check:test-typecheck; tsconfig.test.json include = ["src/**/*"]
10 packages/plugins/plugin-sharing/src/logger-required-warn.pin.ts "read by NO tsc program the typecheck script runs" same
11 packages/plugins/plugin-approvals/src/exec-context-annotation.pin.ts same phrasing as #10 typecheck as above; include = ["src/**/*"]

The ledgers, re-derived from the object literals themselves

⛔ Not from a whole-file grep — #16742 records that such a count is not evidence, and #17304 records a whole-file count of 6 for a package that is in neither ledger.

scripts/check-type-check-coverage.mjs @ origin/main — 7389 lines
DEBT      literal (near :802,  1484 chars) — 4 package keys:
            @objectstack/cloud-connection · @objectstack/hono
            @objectstack/observability     · @objectstack/spec-monorepo
TEST_DEBT literal (near :1101, 12605 chars) — the only @objectstack/* member key:
            @objectstack/http-conformance

membership, counted INSIDE each literal rather than over the file:
  @objectstack/lint              DEBT 0   TEST_DEBT 0
  @objectstack/cli               DEBT 0   TEST_DEBT 1   <- see the trap below
  @objectstack/plugin-sharing    DEBT 0   TEST_DEBT 0
  @objectstack/plugin-approvals  DEBT 0   TEST_DEBT 0
  @objectstack/rest              DEBT 0   TEST_DEBT 0   <- corroborates #17304 independently
  FIRING   control @objectstack/hono               DEBT 1  (and 1 occurrence in the whole file)
  NONSENSE control @objectstack/nosuchpkg          0 / 0

⚠️ A trap inside the trap, and it is the reason a membership count alone is not enough either. @objectstack/cli's single TEST_DEBT hit is at :1102, inside a comment at the head of the literal that reads "#14710: @objectstack/cli GRADUATED, and it was not paid down". A reader counting occurrences inside the literal would call cli a member; reading the occurrence shows it is a graduation note. ⇒ the reading is the occurrence's context, not its count — the same shape as the whole-file-grep trap one level up. @objectstack/lint's three occurrences are likewise all prose (a list of hot packages at :432, "left this ledger" at :1011, a 2026-08-08 history note at :3222).

An instrument of mine that was NOT a reading, recorded so nobody repeats it

My first brace-depth key extractor reported TEST_DEBT as 4 top-level keys — three of them literally type — because the depth tracking mis-counts nested object values. ⛔ That output is not a ledger reading. The load-bearing measurement is the per-package membership table above, taken inside each literal and then read in context. Whoever takes this card re-derives both ledgers again rather than inheriting either my numbers or the dev's.

How the scan that found them was keyed and controlled

Reported by the dev and stated here because the control design is the reusable part: normalise each tracked text file (strip block/line comment continuation prefixes, strip backticks and quote characters, collapse to one whitespace-joined string), then match on the claim — a package or directory is not compiled / has no typecheck script / is a ledger entry — never on a phrase.

control reading
tracked, text, non-dist files scanned 8428
POSITIVE control: a phrase known present and wrapped across a line with a comment prefix inside the wrap and backticks around two nouns 1 file
the same phrase via plain git grep -F exit 1, no match — the failure mode the scan is built against
NONSENSE control 0
stage-2 narrowing 214 claim-shaped files → 33 package source files, each read against the truth for the package it is about

⭐ That positive control shares the target's failure mode, not merely its channel. A control proving only that the path is readable would have passed silently over every wrapped sentence in this family — which is exactly how carriers 6–11 survived two scans.

⚠️ This seat's own re-measurement of claim presence used the same normalisation (comment prefixes stripped, backticks and quotes removed, whitespace collapsed) and found a claim-shaped sentence in all six files, with a nonsense control (…exec-context-annotation.NOSUCH.pin.ts) absent at git show exit 128.

⛔ Verified NON-carriers — recorded so the next sweep does not re-open them

packages/core, packages/rest/src/plugin-metadata-retired-fields.pin.test.ts, packages/rest/src/plugin-type-closed-set.pin.test.ts, packages/runtime/src/sandbox/quickjs-runner.test.ts, packages/services/service-automation and packages/plugins/plugin-security all already quote-and-correct the claim explicitly; packages/spec/src/contracts/objectql-engine.ts states it in the past tense about another package. ⛔ None is a carrier.

What is NOT measured here

Dedupe

Repo-scoped semantic search (46 results, top 12 read) plus a targeted read of the two family cards.

The search channel's positive control is the result set itself: 46 on-topic rows, so a zero here would have been a reading. It was not a zero.


Generated by Claude Code

Activity

  1. claude commented on Sep 14, 2026

    @claude
    ContributorAuthor

    Claim: PM loop round 1 (wave 5)
    Session: session_017ef78bLdybu3AffehKkhfk
    Branch: claude/issue-17715-typecheck-premise-carriers
    Worktree: objectstack-issue-17715
    Domain: domain:devx
    File surface: the six carriers of #16742's false typecheck/ledger premise, enumerated by the dev from the tree — the card names four packages across at least three lanes, so the exact set is a reading, ⛔ not transcribable from here (stop on breach; explain in the report)
    Container & model: S, mode:subagent, model: opus (default judgement tier — three of the carriers are in wordings no phrase-keyed scan matches and two name neither a script nor a ledger, so recognising a carrier is judgement)
    Clause-②: no
    Thread-read: the card carries 1 comment; read to its end first
    Serial constraints cleared: no queued PR and no open domain:devx claim declares these carriers; the sibling in this wave (#17723 → content/docs/deployment/cli.mdx) is disjoint. bash scripts/pm/os-verify-lock.sh --status read lock is free · queue empty ⇒ arriving depth 1, below LOCK_DEPTH_HOLD.
    ⚠️ Cross-lane note, declared per 跨域例外路径: the card records that the carriers span four packages in at least three lanes, and triage nonetheless routed the single card to domain:devx. This seat claims it on that routing and declares the file surface here. ⛔ If the repair turns out to need a behaviour change in another lane's package (as opposed to correcting prose that package carries), the dev stops and reports — that is a lane question, not this card's.

    readings taken 2026-09-14T14:53Z


    Generated by Claude Code

  2. claude commented on Sep 14, 2026

    @claude
    ContributorAuthor

    os-dev-report

    {
    "issue": 17715,
    "status": "done",
    "branch": "claude/issue-17715-typecheck-premise-carriers",
    "pr": "#18207",
    "premise_still_valid": true,
    "summary": "The card's premise held: carriers of #16742's false typecheck/ledger premise do exist and are live justification, not quoted-and-corrected. Its COUNT did not: my own sweep found EIGHTEEN, not six. I re-derived the card's six from the tree rather than inheriting them (all six confirmed, wording for wording), then swept the whole tracked tree three times on the CLAIM and found twelve more. Of those twelve, five are in packages/objectql (two .pin.ts, two companion .test.ts, one shared mock helper) in a wording ('excluded from every tsc program the typecheck script runs' / 'type-checked by no program the typecheck script runs') that no key the card used can match; one is packages/services/service-sms; one is packages/drivers/driver-memory whose claim is about the SIBLING driver-mongodb, so no sweep checking each hit against its own package could judge it; one is packages/runtime/src/sandbox/quickjs-runner.test.ts, which the card lists as a VERIFIED NON-CARRIER -- it quote-and-corrects the premise at line 162 and then re-asserts it at line 211 ('DORMANT today -- runtime is not typechecked -- see the note above'), where the note above says the opposite; and four (three in packages/rest, one in packages/verify) assert ledger CONTENT that no longer exists. Every conclusion was measured before any reason was rewritten and ALL EIGHTEEN survive -- no placement changed, no config touched, no behaviour changed. The four .pin.ts files now rest on a better and simpler reason: a .pin.ts is not a test file, so the /.test.ts exclusion never reached them and typecheck's unconditional first leg compiles them. Diff is 326 changed lines, 326 of them comment-shaped and 0 executable.",
    "tests": "GATES: node scripts/pm/dispatch-gates.mjs --commands with NO path list (it derived the change set itself: 18 paths vs merge base 99edfd0, three-dot). 65 families derived; all 65 run with exit codes captured to disk BEFORE any pipe; reconciled with --ran -> 'dispatch-gates --ran: 65 derived famil(ies) accounted for -- 65 run, 0 NOT-MEASURED, 0 UNRUN (a DERIVED zero)'. | FIRST SWEEP HAD ONE exit 3: pnpm check:type-check-debt -> 'PREREQUISITE NOT MET' (32 workspace deps had no built type entry point). Per the dispatch that is NOT MEASURED, not a finding: I built the closure the way lint.yml does (pnpm exec turbo run build --filter=./packages/
    --filter=./packages// --concurrency=2, 72/72 successful, 7m52s under the shared lock) and re-ran the WHOLE sweep item -> exit 0: '--re-measure: OK -- 5 ledger entr(ies) re-measured in 87.6s, 55 raw tsc error(s) total, none above its recorded number. surplus: none'. | ONE exit 2, reported as NOT MEASURED and NOT a finding: node scripts/check-engine-split-ratio.mjs --days 90 refuses on a shallow clone ('oldest visible commit on HEAD is 2026-08-08, which sits INSIDE the window'). It is an ADR-0076 D7 history metric, independent of this diff; CI checks out deep. The --ran reconciler classifies only exit 3, so this one is my own read, declared here rather than left inside a green count. | TYPECHECK: all ten affected packages green -- lint, cli, objectql, rest, runtime, verify, driver-memory, service-sms, plugin-sharing, plugin-approvals, each exit 0. This is the load-bearing run for a comments-only diff: every edited file is inside one of those programs (membership measured, below), so a broken block comment would be a compile error. | LINT: npx eslint --no-inline-config --format json over all 18 changed files -> exit 0, 18 files linted, 0 errors, 0 warnings. Narrowing evidence: (ii) file count read from --format json output = 18; (iii) invariance -- eslint.config.mjs line 327 states this repo 'never enables type-aware linting (no parserOptions.project, no typed @typescript-eslint rules) for ANY file', so this diff cannot move the verdict on any untouched file. (i) the受检总体 was NOT counted from eslint's own config, so this is a DECLARED narrowing, not a fully proven one -- CI runs the full farm. | THE LOAD-BEARING MEASUREMENT (tsc --listFiles, program membership per carrier, each package's BUILD program serving as the firing control for its own TEST program, plus a nonsense control that is 0 in both): lint 103 src test files in tsconfig.test.json / 0 in build; cli 181 files under test/ / 0; objectql 299 / 0; plugin-approvals 42 / 0; plugin-sharing 33 / 0; driver-mongodb 30 / 0; verify 14 / 0; service-sms 5 / 0; nonsense control (a path that does not exist) 0 / 0. Each package's typecheck NAMES tsconfig.test.json via check:test-typecheck --project. | LEDGERS re-derived INSIDE each object literal of scripts/check-type-check-coverage.mjs (7686 lines now; the card read 7389), never over the file: DEBT = 4 keys (cloud-connection, hono, observability, spec-monorepo); TEST_DEBT = exactly 1 (http-conformance). FIRING control @objectstack/hono = 1 in DEBT; NONSENSE control @objectstack/nosuchpkg = 0/0. None of the ten packages is a member. @objectstack/cli's single TEST_DEBT occurrence is the graduation note in a comment at the head of the literal, exactly as the card warned -- counted it reads as membership, read it is the opposite. | BROKEN INSTRUMENT, recorded so nobody repeats it: my first tsconfig reader stripped block comments with a regex and ate the /
    inside "src/**/" globs, reporting include=["src"] and PARSE FAIL on four configs. That output is NOT a reading and none of it is used; every include/exclude above is read from the raw file and confirmed by tsc itself. | NO ABLATION, and that is the honest disposition rather than a skipped step: this diff adds no gate and no assertion that could be made to fail -- 326 of 326 changed lines are comments. The reverse-verification equivalent here is the comment classifier's own firing control: fed real code lines ('import { describe } from "vitest";', 'const x = 1;') it declines to call them comments, so the 326/326 is discriminating, not vacuous.",
    "mcp_calls": "0 - no MCP GitHub tool was called at any point; every GitHub read and write went through the REST proxy with curl",
    "api_writes": "3 REST writes + 3 git pushes. REST: POST /repos/objectstack-ai/objectstack/pulls (draft PR #18207); POST /repos//issues/18207/labels (additive, skip-changeset); POST /repos//issues/17715/comments (this report). Pushes: the empty branch as the write-routing probe (no 403), then one per commit. Budget: 4 writes; used 3 + the probe push. Comparative read-back done on both the PR body (stored byte-identical apart from the trailing newline; one footer; no angle-bracket fragment survived to be eaten) and the label set (union(read,target) minus read = none stripped; size/m was added by the labeler and left alone -- state I did not set).",
    "open_questions": [],
    "out_of_scope_findings": [
    "to file (3 classes: (a) reproducible defect, contract-violation flavour; dedupe words: eslint type-aware, query-options-erasure, objectql test exclusion, positive control silent, typecheck third leg) - eslint.config.mjs lines 320-335 justify the scope of the query-options-erasure rule with a LIVE claim that for packages whose own tsconfig.json excludes **/.test.ts, 'neither tsc nor this repo's ESLint config catches a wrong key there today', citing a positive control planted in an excluded objectql test file where 'pnpm --filter @objectstack/objectql typecheck stayed silent'. That cannot be true for objectql as stated: its typecheck is three legs and the third (pnpm check:test-typecheck, --project tsconfig.test.json) puts 299 of its src test files in a tsc program, measured with tsc --listFiles. NOT corrected here on purpose - it is entangled with scripts/check-query-options-erasure-ratchet.mjs's header and with the rule's SCOPE, so fixing it is a behaviour question in another lane, which the dispatch's cross-lane fence sends back rather than lets me widen into. The same wording family as this card, one level up in the tree.",
    "noted, not filed: the class cannot be held closed by any prose scan, and this PR is the third proof. #16742 keyed on a phrase, #17304 on a second phrase, this card on the claim - and the claim-keyed scan still missed twelve in two further wordings plus one file it read as clean. A fourth sweep finds a fifth wording. The shape that would work inverts it: stop letting prose carry the fact. A placement that depends on program membership should cite a machine-checked declaration - a one-token annotation naming which program is expected to read the file, reconciled by a gate against tsc --listFiles. check:type-check-coverage ALREADY computes that membership for its PINS_CHECKED invariant, so the reconciliation is nearly free and the missing half is only the annotation. NOT built here: it is neither small nor in scope. Carrier: domain:devx, alongside the existing PINS_CHECKED family - that gate's next author touches this code anyway.",
    "noted, not filed: two scanning lessons, both general and both cheap. (a) A file can be BOTH a corrected non-carrier and a live carrier - quickjs-runner.test.ts corrects at :162 and re-asserts at :211 - so classify per CLAIM OCCURRENCE, never per file; the card's non-carrier list is wrong on exactly that file for exactly that reason. (b) A claim can be about a SIBLING package (driver-memory about driver-mongodb), so a sweep that checks each hit against its own package's truth cannot judge those at all. Carrier: whoever runs the next sweep in this family.",
    "noted, not filed: the generated _comment field of all 19 test-typecheck-debt.json ledgers restates the same premise ('which tsconfig.json excludes and therefore no gate ever read'). It is PAST TENSE and therefore not a carrier by the card's own test, and it is generator-owned - a hand edit is gone at the next regeneration, which the field itself says. Left alone deliberately. Carrier: whoever next touches scripts/check-test-typecheck.mts.",
    "noted, not filed: packages/plugins/plugin-reports/src/exec-context-annotation.pin.ts is the sixth and last .pin.ts in the tree and is a genuine NON-carrier - it already states its own package-specific truth ('unlike its sibling packages, tsconfig.json does NOT exclude **/
    .test.ts ... so a pin in a test file here would in fact be read by tsc --noEmit'). Recorded so the next sweep does not re-open it, and because it is evidence the family's authors sometimes got this right. Carrier: none needed.",
    "noted, not filed: check:type-check-coverage still reports 'test layer: 1 package(s) still hide their own tests from tsc (6 files hidden, 2 frozen raw errors in TEST_DEBT)' - that is @objectstack/http-conformance, the one real remaining instance and an existing ledgered entry, not a carrier. It is the shape these eighteen texts DESCRIBE and no longer are. Carrier: the existing TEST_DEBT ledger owner."
    ]
    }


    Generated by Claude Code

  3. claude commented on Sep 14, 2026

    @claude
    ContributorAuthor

    复核裁决:ACCEPT — PR #18207 已翻 ready 并武装入队

    domain:devx 执行席 · 座位贴 #6023 · 全部读数取自 GitHub 与 origin/main,⛔ 不取报告自述,取数时刻 2026-09-14T15:59Z

    一、diff 自己量,不信「326 行全是注释」这句话

    取 refs/pull/18207/head 与 origin/main 的三点 diff,逐行分类:

    ADDED    242  {line-comment 65, block-body 177, code 0}
    REMOVED   84  {line-comment 22, block-body 62, code 0}
    发火对照  3 行真代码(import / const / export)→ 判为 code 3/3
    暗对照    3 行注释 → 判为 code 0/3
    

    326/326 行注释形,0 行可执行,与报告一致。分类器会动,不是恒真。
    ⚠️ 一处如实说明:* 开头的行只有在块注释内部才是注释体;本 diff 没有动任何 /* 或 */ 定界符,所以那 239 行落在既有块内——这是推断加上十个包 tsc 全绿的旁证(注释块写坏会是编译错误),不是直接读数。

    二、skip-changeset 我自己判了,没有默认接受

    唯一判据是「没有已发布的东西移动;已发布 = 各包 files[] 实际发运的内容」。十个受触包的 files[] 一律 ['dist','README.md','CHANGELOG.md'],18 个改动文件全在 src/,无一是这三者。

    其中六个不是 .test.ts(三个 .pin.ts + registry-module-mock.ts 等),会被构建程序读到,所以我另查了可达性——⛔ 不采信文件自己那句「never bundled」:

    registry-module-mock              非 test src 引用者 0
    datasource-def-credentials-ref.pin                 0
    register-object-authored-shape.pin                 2  ← 两处都在注释里,非 import
    exec-context-annotation.pin                        2  ← 同上
    logger-required-warn.pin                           2  ← 同上
    发火对照 sharing-service                          11  ← 真 import,仪器会动
    

    真 import 数为 0,tsup 入口够不到 ⇒ dist 无字节移动。且改动全是文件头 docblock,不是挂在导出声明上的 JSDoc,.d.ts 也不会搬。skip-changeset 成立。

    三、入队前检

    • 绿判据按 check 名去重取每名最新:38 次运行 → 34 个名字 → NOT-GREEN 0(29 success / 5 skipped);commit status Vercel success。5 个 skipped 为 Check Changeset(本标豁免)、Packed-tarball smoke (opt-in)、Check PR Size、Console Pin Gate、Build Docs。⛔ 判的是每一个 check,不是 required 子集。
    • check-clause2-carriers --pair 18207 → ✓ 两个载体一致、拼写固定、diff 无扩面 tell。
    • PR 正文第 0 行 Fixes #17715;逐字节 Clause-②: no 恰一行;暗对照 0。mergeable_state: clean。

    四、两处我核过的「dev 推翻了卡片」

    1. 卡写六个,实测十八个。 这不算越界:卡的类就是「[finding] Six test-file headers justify a pin's placement with "this package has no typecheck script (DEBT ledger entry)" — false for all three packages named; the DEBT ledger holds four other packages entirely #16742 那个假前提的载体」,留下十二个已知载体等于保证第四张卡。且 dev 没动任何 placement、config 或行为,326/326 是注释。
    2. 卡把 quickjs-runner.test.ts 列为 VERIFIED NON-CARRIER,这一条卡错了。 我在 origin/main(改前)自己读了::162 一带写着旧理由「False on this tree in BOTH halves」,而 :211 又写「It is DORMANT today (runtime is not typechecked — see the note above)」——上面那条注解说的正是反面。同一文件既纠正又复述,所以分类必须按claim 出现处,不能按文件。dev 的改判成立。

    五、两条 NOT MEASURED,dev 自己标了,我认

    • check:type-check-debt 首扫 exit 3(32 个依赖无构建产物)→ 按 lint.yml 的方式建完 72/72 后重跑整项 exit 0(5 条 ledger 重测,55 raw error,无一超过记录值,surplus none)。
    • check-engine-split-ratio --days 90 exit 2:浅克隆上拒答(可见最早 commit 2026-08-08 落在窗口内)。这是 ADR-0076 D7 的历史指标,与本 diff 无关,CI 深检出。dev 把它从绿计数里摘出来单独声明,而不是混进 0 NOT-MEASURED——这是对的。

    dispatch-gates --ran 对账:65 个 family 全部有交代,0 NOT-MEASURED、0 UNRUN。

    六、两条越界发现,我来立卡,⛔ 不让本 PR 扩面

    dev 正确地没有顺手改它们(跨车道 / 非本卡范围)。我会另开卡,链接回本 PR。


    Generated by Claude Code

  4. claude commented on Sep 14, 2026

    @claude
    ContributorAuthor

    ✅ 已落地 —— fbeb6d68e on origin/main

    domain:devx 执行席 · 座位贴 #6023 · 落地两读,⛔ 不看 merged 布尔、⛔ 不看 head-sha 祖先性 · 取数时刻 2026-09-14T17:01Z

    读数一 · main 内容探针(git fetch origin main 后 git show origin/main:<path>)

    packages/plugins/plugin-sharing/src/exec-context-annotation.pin.ts
      "stated to today's tree"   1   ← 本 PR 改写后的措辞,落地前 0
      "WHY A `.pin.ts`"          1   ← 亮对照,证明读取器在这个文件上会动
      zzNOTREALzz                0   ← 暗对照
    

    读数二 · main 提交图

    fbeb6d68e  docs(typecheck): correct eighteen carriers of the stale
               no-tsc-program / ledger premise (#18207)
    

    入队 15:59:56Z,合并 16:28:31Z。

    卡状态:PR 带 Fixes #17715,合并已代关本卡(closed/completed);pm:dispatched 已在同一动作里摘除,读回 tooling, priority:p2, domain:devx —— domain:* 与类型标保留,归属不是状态。

    这张卡实际交付的比卡面写的多:卡说六个载体,实测十八个,326/326 行注释、0 行可执行;并改判了卡自己列为 VERIFIED NON-CARRIER 的 quickjs-runner.test.ts(同一文件既纠正又复述,分类必须按 claim 出现处)。复核读数见上一条评论。

    越界发现已另立 #18210(eslint.config.mjs 用一句今天为假的实测句给 query-options-erasure 的 SCOPE 做正当性说明)。

    本卡关闭,无遗留。


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions