NORTHSET
Proof-of-Pass Receipt
Receipt ID M-112
ISSUE / WORK[Easy] errors.js: The comment "Clear any in-progress terminal state (rest… · PR #160
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-112· #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-107FAILED ORACLEverification - ATTEMPT 2
M-112READY
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-107attempt 1 · FAILED ORACLE · verificationM-112attempt 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
- 9s
- install-only duration
- not captured
- declared commands
- 0.9s
- unclassified executor time
- 3.4s
- 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
- pending
- 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
[Easy] errors.js: The comment "Clear any in-progress terminal state (rest… · PR #160
Verification execution
runtime: northset-oss executor v1
human operator: aeziz
Code
- base
bf5a048af748e2ff896142f615373bffaf1d9895- recorded patch commit
85f57f1ee66eebbddbd41ce89ada31a413437593
declared metadata; not execution-bound- patch diff SHA-256
sha256:9d9f74ad30819770382b88e1cd02db1ea9e4192dd003f80e7b2e5f3c009209a8
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
1/1 declared command returned exit 0 in the recorded environment
node --test src/errors.terminal-cleanup.test.jsexit 0 · 0.9s
run wall (derived from recorded timestamps) 13.4s
PASS — 1/1 declared command
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/src/errors.js b/src/errors.js
index 2169ba5c2712e640fb15fabd785e1224dc920f4d..990f6b03801a785f93f150d0bb83092795587dcd 100644
--- a/src/errors.js
+++ b/src/errors.js
@@ -62,13 +62,19 @@ const ERROR_CODES = {
ERR_INVALID_IP: 'ERR_INVALID_IP'
};
+function restoreTerminalState() {
+ if (process.stdout.isTTY) {
+ process.stdout.write('\x1b[?25h\x1b[0m\n');
+ }
+}
+
/**
* Registers global process error handlers.
* To be called early in the lifecycle.
*/
function registerGlobalErrorHandlers() {
process.on('uncaughtException', (err) => {
- // Clear any in-progress terminal state (restore cursor, etc.)
+ restoreTerminalState();
console.error(`\nfiledrop: unexpected error: ${err.message}`);
if (process.env.FILEDROP_DEBUG) {
console.error(err.stack);
@@ -77,6 +83,7 @@ function registerGlobalErrorHandlers() {
});
process.on('unhandledRejection', (reason) => {
+ restoreTerminalState();
console.error(`\nfiledrop: unhandled async error: ${reason}`);
if (process.env.FILEDROP_DEBUG) {
console.error(reason?.stack || reason);
diff --git a/src/errors.terminal-cleanup.test.js b/src/errors.terminal-cleanup.test.js
new file mode 100644
index 0000000000000000000000000000000000000000..f9dbc5f48c609bc3758af41d786c600b405c5f6e
--- /dev/null
+++ b/src/errors.terminal-cleanup.test.js
@@ -0,0 +1,70 @@
+const test = require('node:test');
+const assert = require('node:assert/strict');
+const { registerGlobalErrorHandlers } = require('./errors.js');
+
+test('restores terminal state before fatal exit', (t) => {
+ const originalOn = process.on;
+ const originalExit = process.exit;
+ const originalWrite = process.stdout.write;
+ const originalIsTTY = process.stdout.isTTY;
+ const originalConsoleError = console.error;
+ const originalDebug = process.env.FILEDROP_DEBUG;
+ const handlers = {};
+ const events = [];
+
+ t.after(() => {
+ process.on = originalOn;
+ process.exit = originalExit;
+ process.stdout.write = originalWrite;
+ process.stdout.isTTY = originalIsTTY;
+ console.error = originalConsoleError;
+ if (originalDebug === undefined) {
+ delete process.env.FILEDROP_DEBUG;
+ } else {
+ process.env.FILEDROP_DEBUG = originalDebug;
+ }
+ });
+
+ process.on = (event, handler) => {
+ handlers[event] = handler;
+ return process;
+ };
+ registerGlobalErrorHandlers();
+ process.on = originalOn;
+
+ delete process.env.FILEDROP_DEBUG;
+ console.error = () => {};
+ process.stdout.write = (chunk) => {
+ events.push({ type: 'write', chunk });
+ return true;
+ };
+ process.exit = (code) => {
+ events.push({ type: 'exit', code });
+ };
+
+ const fatalErrors = [
+ ['uncaughtException', new Error('sync failure')],
+ ['unhandledRejection', new Error('async failure')]
+ ];
+
+ process.stdout.isTTY = true;
+ for (const [event, error] of fatalErrors) {
+ events.length = 0;
+ handlers[event](error);
+
+ assert.deepStrictEqual(events, [
+ { type: 'write', chunk: '\x1b[?25h\x1b[0m\n' },
+ { type: 'exit', code: 99 }
+ ], event);
+ }
+
+ process.stdout.isTTY = false;
+ for (const [event, error] of fatalErrors) {
+ events.length = 0;
+ handlers[event](error);
+
+ assert.deepStrictEqual(events, [
+ { type: 'exit', code: 99 }
+ ], event);
+ }
+});
Redacted stdout
=== cmd 1: node --test src/errors.terminal-cleanup.test.js ===
✔ restores terminal state before fatal exit (6.741667ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 76.696667
Redacted stderr
=== cmd 1: node --test src/errors.terminal-cleanup.test.js ===
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:3dce6eeb6ebed5786d502118cfbccd21ebba62b95dc7ed5db4bcaf66cf41a9b3- Signed asset SHA-256
sha256:c688b4c472568fe2c60b7e88b9e2772fc35b1d130d69ff9a31da88c8715d89d2- Signed provenance recorded
- verified 2026-07-16T19:25:10.637Z
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-112-3dce6eeb6ebe.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