NORTHSET
Proof-of-Pass Receipt
Receipt ID M-168
ISSUE / WORKIncorrect "Addon files were detected" message · PR #11045
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
- 4 totalcurrent
M-168· #4 - 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-130FAILED ORACLEverification - ATTEMPT 2
M-140FAILED INFRA TERMINALinfrastructure - ATTEMPT 3
M-152FAILED AUTHORauthoring - ATTEMPT 4
M-168READY
ATTEMPT 4 / 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-130attempt 1 · FAILED ORACLE · verificationM-140attempt 2 · FAILED INFRA TERMINAL · infrastructureM-152attempt 3 · FAILED AUTHOR · authoringM-168attempt 4 · 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
- 2m22s
- install-only duration
- not captured
- declared commands
- 4s
- unclassified executor time
- 58.3s
- 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
Incorrect "Addon files were detected" message · PR #11045
Verification execution
runtime: northset-oss executor v1
human operator: aeziz
Code
- base
e2da7a951cb1ca69448f0ebd539a505984167548- recorded patch commit
cc4d361534cfca16ebf26050ed26a0c0cbbd9db1
declared metadata; not execution-bound- patch diff SHA-256
sha256:ddb51482eeef45b4f033021e60d53824df644555de4ac480015688815dd35be9
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 node_modules/mocha/bin/mocha.js --require ./tests/bootstrap.js tests/unit/models/addon-test.js --fgrep 'does not require a JavaScript preprocessor for an addon tree containing only .gitkeep files'exit 0 · 4s
run wall (derived from recorded timestamps) 3m24s
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 check only; maintainer review, CI, and merge remain independent decisions.
Committed patch.diff
diff --git a/lib/models/addon.js b/lib/models/addon.js
index 58f3fb054b958afac2370737482d1e567a4ea6ae..fc8e15d51942b654ac59ae6da17d54bfa4c21afe 100644
--- a/lib/models/addon.js
+++ b/lib/models/addon.js
@@ -1240,6 +1240,24 @@ let addonProto = {
@return {Tree} Processed javascript file tree
*/
processedAddonJsFiles(inputTree) {
+ let files = this._getAddonTreeFiles();
+ let addonTreePath = this._treePathFor('addon');
+ let addonTemplatesTreePath = this._treePathFor('addon-templates');
+ let addonTemplatesTreeInAddonTree =
+ addonTemplatesTreePath === addonTreePath || addonTemplatesTreePath.indexOf(`${addonTreePath}/`) === 0;
+
+ if (!addonTemplatesTreeInAddonTree) {
+ files = files.concat(this._getAddonTemplatesTreeFiles());
+ }
+
+ let addonFiles = files.filter((file) => !file.endsWith('/'));
+ let containsOnlyGitkeepFiles =
+ addonFiles.length > 0 && addonFiles.every((file) => path.basename(file) === '.gitkeep');
+
+ if (containsOnlyGitkeepFiles) {
+ return inputTree;
+ }
+
let preprocessedAddonJS = this._addonPreprocessTree('js', inputTree);
let processedAddonJS = this.preprocessJs(preprocessedAddonJS, '/', this.name, {
diff --git a/tests/unit/models/addon-test.js b/tests/unit/models/addon-test.js
index e4ee3eccfe82e588924e66469e17021454e48412..2cf41496baad54cea721b27e7e72fbdac65a9080 100644
--- a/tests/unit/models/addon-test.js
+++ b/tests/unit/models/addon-test.js
@@ -555,6 +555,38 @@ describe('models/addon.js', function () {
});
});
+ describe('compileAddon', function () {
+ beforeEach(function () {
+ projectPath = path.resolve(fixturePath, 'simple');
+ const packageContents = require(path.join(projectPath, 'package.json'));
+ let cli = new MockCLI();
+
+ project = new Project(projectPath, packageContents, cli.ui, cli);
+
+ project.initializeAddons();
+
+ addon = project.addons.find((addon) => addon.name === 'ember-generated-with-export-addon');
+ });
+
+ it('does not require a JavaScript preprocessor for an addon tree containing only .gitkeep files', async function () {
+ const { path: addonRoot } = await tmp.dir({ unsafeCleanup: true });
+ let addonPath = path.join(addonRoot, 'addon');
+
+ fs.outputFileSync(path.join(addonPath, '.gitkeep'), '');
+ fs.outputFileSync(path.join(addonPath, 'templates', '.gitkeep'), '');
+
+ addon.root = addonRoot;
+ let addonTree = addon.treeGenerator(addonPath);
+
+ expect(() => addon.treeForAddon(addonTree)).not.to.throw();
+
+ fs.outputFileSync(path.join(addonPath, 'index.js'), '');
+ delete addon._cachedFileSystemInfo;
+
+ expect(() => addon.treeForAddon(addonTree)).to.throw(/no JavaScript preprocessor/);
+ });
+ });
+
describe('_fileSystemInfo', function () {
beforeEach(function () {
projectPath = path.resolve(fixturePath, 'simple');
Redacted stdout
=== cmd 1: node node_modules/mocha/bin/mocha.js --require ./tests/bootstrap.js tests/unit/models/addon-test.js --fgrep 'does not require a JavaScript preprocessor for an addon tree containing only .gitkeep files' ===
ok 1 models/addon.js compileAddon does not require a JavaScript preprocessor for an addon tree containing only .gitkeep files
# tests 1
# pass 1
# fail 0
1..1
Redacted stderr
=== cmd 1: node node_modules/mocha/bin/mocha.js --require ./tests/bootstrap.js tests/unit/models/addon-test.js --fgrep 'does not require a JavaScript preprocessor for an addon tree containing only .gitkeep files' ===
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:b106baa1d6bebdad58ae2100dff0241cd552b2eb4aa88e6326a6bc0f43f587ff- Signed asset SHA-256
sha256:c2d982e8c56a71d77383d7b2a33a234f6091a75737a6022f4d9b4ea1b5e4fa38- Signed provenance recorded
- verified 2026-07-16T22:49:24.995Z
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 check only; maintainer review, CI, and merge remain independent decisions.
Signed bundle
Verify this receipt
gh attestation verify run-record-M-168-b106baa1d6be.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