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
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.
- ATTEMPT 1
M-102FAILED AUTHORauthoring - ATTEMPT 2
M-105READY
ATTEMPT 2 / EXECUTION ANATOMY
03 / ECONOMIC NARRATIVE
Economic identity
Observed sponsorship, authorization, scope, transfer, and outcome. No estimates or inferred value.
01 / MANDATE
Sponsored and authorized
The recorded mandate names both its sponsor and initiative, with authorization tied to a named approver and approval time.
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.
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.
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
No complete total is recorded; see the missing or unpriced component record above.
Evidence annexEconomic · technical · provenance · limitations
01Economic evidence
Lineage, usage, caps, outcome, and cost provenance
Economic evidence
Lineage, usage, caps, outcome, and cost provenanceAttempt lineage
M-102attempt 1 · FAILED AUTHOR · authoringM-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
02Technical evidence
Code, environment, exact commands, patch, and outputs
Technical evidence
Code, environment, exact commands, patch, and outputsProject
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
npm run test:unit -- test/unit/typescript-output-filename.test.tsexit 0 · 4.2s
npm run lintexit 0 · 7.3s
npm run buildexit 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
[1m[30m[46m RUN [49m[39m[22m [36mv4.1.10 [39m[90m/workspace[39m
[32m✓[39m test/unit/typescript-output-filename.test.ts [2m([22m[2m1 test[22m[2m)[22m[32m 14[2mms[22m[39m
[2m Test Files [22m [1m[32m1 passed[39m[22m[90m (1)[39m
[2m Tests [22m [1m[32m1 passed[39m[22m[90m (1)[39m
[2mType Errors [22m [2mno errors[22m
[2m Start at [22m 16:57:37
[2m Duration [22m 2.66s[2m (transform 1.90s, setup 0ms, import 2.45s, tests 14ms, environment 0ms)[22m
=== 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 ===
[33mTesting types with tsc and vue-tsc is an experimental feature.
Breaking changes might not follow SemVer, please pin Vitest's version when using it.[39m
=== cmd 2: npm run lint ===
=== cmd 3: npm run build ===
03Provenance & limitations
Bundle identity, attestation, verification, and claims boundary
Provenance & limitations
Bundle identity, attestation, verification, and claims boundaryRecord 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
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.ymlAttestation 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