NORTHSET

Proof-of-Pass Receipt

Receipt ID M-105

ISSUE / WORKIncorrect filename in comment in TS output · PR #2948

CONTRIBUTOR SELF-RUN — NOT MAINTAINER VERIFICATION

RUN

01 / TECHNICAL RESULT

Technical result

3/3

declared commands passed

Recorded on the named code in the named execution environment. The evidence annex carries the exact scope.

Upstream
OPENmutable external state
Attempts
2 totalcurrent M-105 · #2
Cost record
PARTIALunpriced

02 / RECORDED WORK SEQUENCE

Northset Proofline

Every task-bound attempt is shown in recorded order. Anatomy geometry follows each non-null elapsed duration’s share; labels retain exact recorded time.

  1. ATTEMPT 1M-102FAILED AUTHORauthoring
  2. ATTEMPT 2M-105READY

ATTEMPT 2 / EXECUTION ANATOMY

01Discoverynot captured
02Qualification2m36s27.1%
03Authoring5m13s54.5%
04Verification1m45s18.4%

03 / ECONOMIC NARRATIVE

Economic identity

Observed sponsorship, authorization, scope, transfer, and outcome. No estimates or inferred value.

  1. 01 / MANDATE

    Sponsored and authorized

    The recorded mandate names both its sponsor and initiative, with authorization tied to a named approver and approval time.

    SPONSORNorthset OSS Fund · OSS mission experimentation

    AUTHORIZEDinternal-user:aeziz ·

  2. 02 / WORK

    Demand became scoped work

    An external issue invitation became a stable task and a recorded code-and-test scope, without treating scope as a measure of value.

    TASKTASK-OSS-E61FC2CAB845936F · defect fix · attempt 2

    INVITATIONIssue #971 · label

    SCOPE5 files · 61 changed lines · 4 production files · 1 test files · 3 declared checks

  3. 03 / EXTERNAL OUTCOME

    Transfer and upstream state

    The recorded maintainer transfer and its contingency are separate from upstream state, which remains a mutable external observation.

    MAINTAINER TRANSFERnone · not merge contingent

    UPSTREAMOPEN · mutable external observation

04 / COST COMPLETENESS

Known, unknown, and unpriced

Known: maintainer payment was none. A known zero external transfer is not a zero total cost.

Missing or unpriced components

  • model inference
  • actual host compute
  • human review
  • shared tooling
TOTAL COSTUNPRICED

No complete total is recorded; see the missing or unpriced component record above.

Evidence annexEconomic · technical · provenance · limitations
01

Economic evidence

Lineage, usage, caps, outcome, and cost provenance

Attempt lineage

  • M-102attempt 1 · FAILED AUTHOR · authoring
  • M-105attempt 2 · READY

Recorded usage

requested reviewer model
gpt-5.6-sol
actual reviewer model
not captured
requested author model
gpt-5.6-sol
actual author model
not captured
networked setup phase
1m04s
install-only duration
not captured
declared commands
17.1s
unclassified executor time
24.2s
CPU time
not captured
peak RSS
not captured

Configured resource envelope

CPU cap
2
memory cap
4096 MB
PID cap
512
command wall cap
1800s
output cap / stream
2000000 bytes

Configured limits are an envelope, not observed consumption.

Cost lines

  • maintainer paymentobserved quantity unpriced · 0 external transfer · amount unavailable

Cost status: partial. Values without source-backed quantities and rates remain null.

Outcome facts

technical checks passed
true
PR opened
true
CI
success
merged
false
accepted as submitted
not established
external cycle time
not captured
released
not observed
deployed
not observed
business result
not observed
02

Technical evidence

Code, environment, exact commands, patch, and outputs

Project

glideapps/quicktype

Work

Incorrect filename in comment in TS output · PR #2948

Verification execution

runtime: northset-oss executor v1
human operator: aeziz

Code

base
662ad5b635064fd0be6a5e27f8de06bec45d5207
recorded patch commit
a47489b19c182d54b14a0c8d78afda5b1e23864a
declared metadata; not execution-bound
patch diff SHA-256
sha256:c7256fb67e572058e6e74d8006f6f43fd9a9077ae7d0bcb25a48695e950cb816
bound to executed patch bytes

Environment

image reference
node@sha256:40ad9f3064e67d6860b4bc3fe1880b2953934fd6320ada990e45fe0efa6badd7
repository digest
node@sha256:40ad9f3064e67d6860b4bc3fe1880b2953934fd6320ada990e45fe0efa6badd7
immutable image ID
sha256:6ed6ff875e9714bb845b850b08f3ad231ccbb5848812647bcf11acdd4bd1d2f8
platform
linux/arm64
network
phaseA:bridge,phaseB:none

Declared checks

Execution summary
3/3 declared commands returned exit 0 in the recorded environment

  1. npm run test:unit -- test/unit/typescript-output-filename.test.ts

    exit 0 · 4.2s

  2. npm run lint

    exit 0 · 7.3s

  3. npm run build

    exit 0 · 5.6s

run wall (derived from recorded timestamps) 1m45s

PASS — 3/3 declared commands

Every command listed returned exit 0 in the declared environment. Only the listed commands are in scope. Unlisted test, lint, typecheck, build, coverage, compiler, full-suite, and CI gates are not implied or recorded.

Public scope interpretation

The receipt proves the declared automated checks only; maintainer review and merge remain independent human decisions.

Committed patch.diff
diff --git a/packages/quicktype-core/src/language/JavaScript/JavaScriptRenderer.ts b/packages/quicktype-core/src/language/JavaScript/JavaScriptRenderer.ts
index f03e41f27fba43e2705016fb5fe06bd267132056..bdb064caef1a8631007cf2c7ba5640ac09e5c6ce 100644
--- a/packages/quicktype-core/src/language/JavaScript/JavaScriptRenderer.ts
+++ b/packages/quicktype-core/src/language/JavaScript/JavaScriptRenderer.ts
@@ -493,15 +493,15 @@ function r(name${stringAnnotation}) {
 
     protected emitTypes(): void {}
 
-    protected emitUsageImportComment(): void {
+    protected emitUsageImportComment(_givenOutputFilename: string): void {
         this.emitLine('//   const Convert = require("./file");');
     }
 
-    protected emitUsageComments(): void {
+    protected emitUsageComments(givenOutputFilename: string): void {
         this.emitMultiline(`// To parse this data:
 //`);
 
-        this.emitUsageImportComment();
+        this.emitUsageImportComment(givenOutputFilename);
         this.emitLine("//");
         this.forEachTopLevel("none", (_t, name) => {
             const camelCaseName = modifySource(camelCase, name);
@@ -537,11 +537,11 @@ function r(name${stringAnnotation}) {
         });
     }
 
-    protected emitSourceStructure(): void {
+    protected emitSourceStructure(givenOutputFilename: string): void {
         if (this.leadingComments !== undefined) {
             this.emitComments(this.leadingComments);
         } else {
-            this.emitUsageComments();
+            this.emitUsageComments(givenOutputFilename);
         }
 
         this.emitTypes();
diff --git a/packages/quicktype-core/src/language/TypeScriptFlow/FlowRenderer.ts b/packages/quicktype-core/src/language/TypeScriptFlow/FlowRenderer.ts
index 76446d9b34571434c2d9e719a0b4801589a5469f..a0a3bfaee24364824c60178bdd65a340c4172742 100644
--- a/packages/quicktype-core/src/language/TypeScriptFlow/FlowRenderer.ts
+++ b/packages/quicktype-core/src/language/TypeScriptFlow/FlowRenderer.ts
@@ -39,9 +39,9 @@ export class FlowRenderer extends TypeScriptFlowBaseRenderer {
         });
     }
 
-    protected emitSourceStructure(): void {
+    protected emitSourceStructure(givenOutputFilename: string): void {
         this.emitLine("// @flow");
         this.ensureBlankLine();
-        super.emitSourceStructure();
+        super.emitSourceStructure(givenOutputFilename);
     }
 }
diff --git a/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptFlowBaseRenderer.ts b/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptFlowBaseRenderer.ts
index d4c2393d3809435029303e3e69eecba3976f944b..d20f56c19cdedc6757a5fe711f5d3834c5c54065 100644
--- a/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptFlowBaseRenderer.ts
+++ b/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptFlowBaseRenderer.ts
@@ -191,9 +191,9 @@ export abstract class TypeScriptFlowBaseRenderer extends JavaScriptRenderer {
         );
     }
 
-    protected emitUsageComments(): void {
+    protected emitUsageComments(givenOutputFilename: string): void {
         if (this._tsFlowOptions.justTypes) return;
-        super.emitUsageComments();
+        super.emitUsageComments(givenOutputFilename);
     }
 
     protected deserializerFunctionLine(t: Type, name: Name): Sourcelike {
diff --git a/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptRenderer.ts b/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptRenderer.ts
index 43537b1464c5869a3a1a16252d28180395bf395e..f413b05106f4ecf8cc74bf28ab66c20a2fc598dd 100644
--- a/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptRenderer.ts
+++ b/packages/quicktype-core/src/language/TypeScriptFlow/TypeScriptRenderer.ts
@@ -50,7 +50,7 @@ export class TypeScriptRenderer extends TypeScriptFlowBaseRenderer {
 
     protected emitModuleExports(): void {}
 
-    protected emitUsageImportComment(): void {
+    protected emitUsageImportComment(givenOutputFilename: string): void {
         const topLevelNames: Sourcelike[] = [];
         this.forEachTopLevel(
             "none",
@@ -59,10 +59,18 @@ export class TypeScriptRenderer extends TypeScriptFlowBaseRenderer {
             },
             isNamedType,
         );
+        const moduleName =
+            givenOutputFilename === "stdout"
+                ? "file"
+                : givenOutputFilename
+                      .replace(/^.*[/\\]/, "")
+                      .replace(/\.[^.]+$/, "");
         this.emitLine(
             "//   import { Convert",
             topLevelNames,
-            ' } from "./file";',
+            ' } from "./',
+            moduleName,
+            '";',
         );
     }
 
diff --git a/test/unit/typescript-output-filename.test.ts b/test/unit/typescript-output-filename.test.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1abd877109391822d39ae1501dab139019325a48
--- /dev/null
+++ b/test/unit/typescript-output-filename.test.ts
@@ -0,0 +1,31 @@
+import { describe, expect, test } from "vitest";
+
+import {
+    InputData,
+    jsonInputForTargetLanguage,
+    quicktype,
+} from "../../packages/quicktype-core/src/index.js";
+
+describe("TypeScript output filename", () => {
+    test("uses output filename in TypeScript usage imports", async () => {
+        const jsonInput = jsonInputForTargetLanguage("typescript");
+        await jsonInput.addSource({
+            name: "ExperimentCounts",
+            samples: ['{"experiments": 3}'],
+        });
+
+        const inputData = new InputData();
+        inputData.addInput(jsonInput);
+        const result = await quicktype({
+            inputData,
+            lang: "typescript",
+            outputFilename: "src/cli/ExperimentCounts.ts",
+        });
+        const output = result.lines.join("\n");
+
+        expect(output).toContain(
+            '//   import { Convert, ExperimentCounts } from "./ExperimentCounts";',
+        );
+        expect(output).not.toContain('from "./file"');
+    });
+});
Redacted stdout
=== cmd 1: npm run test:unit -- test/unit/typescript-output-filename.test.ts ===

> quicktype@24.0.0 test:unit
> vitest run test/unit/typescript-output-filename.test.ts


 RUN  v4.1.10 /workspace

 ✓ test/unit/typescript-output-filename.test.ts (1 test) 14ms

 Test Files  1 passed (1)
      Tests  1 passed (1)
Type Errors  no errors
   Start at  16:57:37
   Duration  2.66s (transform 1.90s, setup 0ms, import 2.45s, tests 14ms, environment 0ms)

=== cmd 2: npm run lint ===

> quicktype@24.0.0 lint
> biome check .

Checked 271 files in 6s. No fixes applied.
=== cmd 3: npm run build ===

> quicktype@24.0.0 build
> npm run clean && npm run build --workspaces --if-present && node node_modules/typescript/bin/tsc


> quicktype@24.0.0 clean
> rm -rf dist *~ packages/*/{dist,out}


> quicktype-core@24.0.0 build
> npm run build:cjs && npm run build:esm


> quicktype-core@24.0.0 build:cjs
> node ../../node_modules/typescript/bin/tsc -p tsconfig.json


> quicktype-core@24.0.0 build:esm
> node ../../node_modules/typescript/bin/tsc -p tsconfig.esm.json && node script/write-esm-package-json.mjs


> quicktype-graphql-input@24.0.0 build
> node ../../node_modules/typescript/bin/tsc


> quicktype-typescript-input@24.0.0 build
> node ../../node_modules/typescript/bin/tsc


> quicktype@24.0.0 build
> node ../../node_modules/typescript/bin/tsc -p ./

Redacted stderr
=== cmd 1: npm run test:unit -- test/unit/typescript-output-filename.test.ts ===
Testing types with tsc and vue-tsc is an experimental feature.
Breaking changes might not follow SemVer, please pin Vitest's version when using it.
=== cmd 2: npm run lint ===
=== cmd 3: npm run build ===
03

Provenance & limitations

Bundle identity, attestation, verification, and claims boundary

Record details

payment
none · not merge-contingent
redactions
none recorded
Bundle contents digest
sha256:ac1b5673f442d98aebf606a46830a747150e5341feb231aabb59d2032cc330f2
Signed asset SHA-256
sha256:c6ce05ab14819b3e2efa00c0a0189720d4f404f5813e9a44ea5244888724b385
Signed provenance recorded
verified 2026-07-16T17:16:19.585Z

NOT INCLUDED

  • Does not prove code quality
  • Does not prove security
  • Contributor self-run record of Northset's own contribution; not the maintainer's verification.
  • The receipt proves the declared automated checks only; maintainer review and merge remain independent human decisions.

Signed bundle

Download signed bundle

Verify this receipt

gh attestation verify run-record-M-105-ac1b5673f442.tar.gz --repo northset-oss/verification-pilot --signer-workflow northset-oss/verification-pilot/.github/workflows/attest-bundle.yml

Attestation confirms that Northset's signing workflow produced this exact bundle. The signer does not witness the recorded run, and verification does not turn it into maintainer verification.

QR → receipt page
Northset contributed this fix and ran its declared checks. Contributor self-run. Not maintainer verification.

Evidence of what ran — not a verdict that the code is good.

SELF-FUNDED FIELD-TESTING.

FOR MAINTAINERS

Request a private run

Maintain an open-source project? Send Northset a PR already in your queue. We run its repository-declared checks in an isolated container and return the run record privately. We do not modify the PR. Nothing is published without your approval. Free during the pilot.

The issue form is public. Do not include secrets or private repository details there; use email instead.

Already onboarded? Add northset-verify to a PR to request a run on that PR.

Claims boundary

This page reports scoped proof-of-pass receipt evidence. It does not prove code quality, security, full CI coverage, production readiness, or maintainer approval. An attestation confirms bundle provenance; it does not broaden the receipt's claim.

Read the full Claims Boundary policy.