NORTHSET
Proof-of-Pass Receipt
Receipt ID M-104
ISSUE / WORK[Bug] Course progression calculation fails for dynamically added lessons · PR #125
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-104· #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-101FAILED ORACLEverification - ATTEMPT 2
M-104READY
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-101attempt 1 · FAILED ORACLE · verificationM-104attempt 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
- 24.4s
- install-only duration
- not captured
- declared commands
- 2.4s
- unclassified executor time
- 11.5s
- 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
- failure
- 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
soghayarmahmoud/procode-edu-pulse-lms
Work
[Bug] Course progression calculation fails for dynamically added lessons · PR #125
Verification execution
runtime: northset-oss executor v1
human operator: aeziz
Code
- base
28f89c9f1bab65ff32207074cfe3f97f997caf1a- recorded patch commit
5814010590032e00998e91e83e0824c05254e867
declared metadata; not execution-bound- patch diff SHA-256
sha256:71720c13a69b3efb5346a22894318b5e438484a217e857c1f7c42b4502f14980
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
npm test -- js/components/__tests__/sidebar.test.jsexit 0 · 2.4s
run wall (derived from recorded timestamps) 38.3s
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/js/components/__tests__/sidebar.test.js b/js/components/__tests__/sidebar.test.js
new file mode 100644
index 0000000000000000000000000000000000000000..843eacb92570ac159b498cf29c011f60a070bde9
--- /dev/null
+++ b/js/components/__tests__/sidebar.test.js
@@ -0,0 +1,36 @@
+import { describe, expect, it, vi } from 'vitest';
+import { SidebarComponent } from '../sidebar.js';
+
+vi.mock('../../services/storage.js', () => ({
+ storage: {
+ getCourseProgress: vi.fn(() => ({
+ completedLessons: ['lesson-1', 'lesson-2'],
+ completedModules: [],
+ })),
+ },
+}));
+
+describe('SidebarComponent', () => {
+ it('uses loaded lesson count for progress', () => {
+ const container = {
+ innerHTML: '',
+ querySelectorAll: vi.fn(() => []),
+ };
+ const course = {
+ id: 'course-1',
+ title: 'Course 1',
+ totalLessons: 1,
+ };
+ const lessons = [
+ { id: 'lesson-1', title: 'Lesson 1', type: 'theory' },
+ { id: 'lesson-2', title: 'Lesson 2', type: 'practice' },
+ ];
+
+ new SidebarComponent(container, course, lessons, 'lesson-1');
+
+ expect(container.innerHTML).toContain('<span>2/2 lessons</span>');
+ expect(container.innerHTML).toContain('<span>100%</span>');
+ expect(container.innerHTML).toContain('style="width:100%"');
+ expect(course.totalLessons).toBe(1);
+ });
+});
diff --git a/js/components/sidebar.js b/js/components/sidebar.js
index fd226ee94885163676901f944cfadf14d156120e..f82f53300fa0b341cd8bc5fe7ca19b25fe6a3d49 100644
--- a/js/components/sidebar.js
+++ b/js/components/sidebar.js
@@ -33,7 +33,7 @@ export class SidebarComponent {
render() {
const courseProgress = storage.getCourseProgress(this.course.id);
const completedCount = courseProgress.completedLessons.length;
- const totalLessons = this.course.totalLessons;
+ const totalLessons = this.lessons.length;
const percent = Math.round((completedCount / totalLessons) * 100);
// build module + lesson list if modules provided
Redacted stdout
=== cmd 1: npm test -- js/components/__tests__/sidebar.test.js ===
> procode-edu-pulse-lms@1.0.0 test
> vitest run js/components/__tests__/sidebar.test.js
[7m[1m[36m RUN [39m[22m[27m [36mv1.6.1[39m [90m/workspace[39m
[32m✓[39m js/components/__tests__/sidebar.test.js [2m ([22m[2m1 test[22m[2m)[22m[90m 2[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
[2m Start at [22m 16:52:24
[2m Duration [22m 505ms[2m (transform 40ms, setup 0ms, collect 41ms, tests 2ms, environment 0ms, prepare 135ms)[22m
Redacted stderr
=== cmd 1: npm test -- js/components/__tests__/sidebar.test.js ===
[33mThe CJS build of Vite's Node API is deprecated. See https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more details.[39m
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:c7487c916022512cc06f650dae319af4a58570865a01f1728209918c73482634- Signed asset SHA-256
sha256:864a3e0b85d5a1b07b025e87ca9e57a36de69b5a5a2b00a24c099b578be02090- Signed provenance recorded
- verified 2026-07-16T17:16:19.272Z
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-104-c7487c916022.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